说明: 这是本书的第八章内容,由于项目需要,提到前面来看啦~~~O(∩_∩)O
一、模板template的定义
Play中的模板是html代码和Scala代码的混合而成的,其中Scala代码以@开头,一个简单的模板如下:
@(product: List[Product], count: Integer)
- @for(product <- products) {
- @product.ean - @product.name
- @product.description }
注解: 如果想用HTML的方式输出变量或表达式的值,而表示为Scala代码,使用@Html(), 如:
// boldName = "worldHello @Html(boldName)!
二、表达式的范围Scope--in-line expression
1. 这里的"-"是文本,有两个Scala表达式
2. a multi-token statement
3. a multi-statement expression
4. 注解
和
- 应该尽量避免如1,2所示的复杂的表达式
- Scala代码格式参见: http://docs.scala-lang.org/style/scaladoc.html
三、模板的基本功能说明
1、模板参数
@* general template parameters*@@(customer: models.Customer, orders: List[models.Order])@* default values for parameters*@@(title: String = "Home")@* several parameter groups *@@(title:String)(body: Html)
模板参数应写在template的最开头
2. Iterating
- 一般List的循环结构见上(略)
- Map的循环
@(eanMap: Map[Long, Product])......
- @for((ean, product) <- eanMap) {
- @ean - @product.name
- @product.description }
- Set的循环
@(products: Set[Product])......
- @for((product, i) <- products.zipWithIndex) {
- Product @i - @product.name
- @product.description }
3. reusable blocks
@display(product: models.Product) = { @product.getName() ($@product.getPrice())}
- @for(product <- products) { @display(product) }
还可以写成pure code blocks(不知道该如何翻译~~~)
@title(text: String) = @{ text.split(' ').map(_.capitalize).mkString(" ")}@title("hello world")
4. reusable values
@defining(user.getFirstName() + " " + user.getLastName()) { fullName =>Hello @fullName}
使用@defining()
四、模板的模块化
main.scala.html
@(title: String = "Paperclips")(content: Html)paperclips.example.com @navigationProducts
@content
view.scala.html
@(products: Seq[Product])@main("Products") {Products
- @for(product <- products) {
-
@product.name
@product.description
}
调用: views.html.render(content)
navigation.scala.html
@()
五、Message的使用和国际化(internationalization)
1. 国际化(internationalization)
在conf/application.conf中设置
application.langs="en,en-US,fr"
2. Message
1)messages files文件所在位置——conf/messages.xxx 如果有不同的语言,其文件名分别为conf/messages.fr或conf/messages.en-US
2)定义Message——使用play.i18n.Messages object对象 String title = Messages.get("home.title") 也可以指定语言: String title = Messages.get(new Lang(Lang.forCode("fr")), "home.title")
3)在模板templates文件中如何使用 @import play.i18n._ @Messages.get("key")
4)Message的格式化方法
conf/messages.en的格式化 | 调用 | 输出 |
files.summary=The disk {1} contains {0} file(s) | Messages.get("files.summary", d.files.length, d.name) | |
shop.basketcount=Your cart {0,choice,0#is empty|1#has one item|1< has {0} items} | <p>@Messages("shop.basketcount", 0)</p><p>@Messages("shop.basketcount", 1)</p><p>@Messages("shop.basketcount", 10)</p> | Your cart is empty.Your cart has one item.Your cart has 10 items. |
5)Retrieving supported languages from an HTTP request
public static Result index() { return ok(request().acceptLanguages());}
参考:http://www.playframework.com/documentation/2.2.x/JavaTemplates