《Play for Java》学习笔记(三)template+Message

说明: 这是本书的第八章内容,由于项目需要,提到前面来看啦~~~O(∩_∩)O

一、模板template的定义

Play中的模板是html代码和Scala代码的混合而成的,其中Scala代码以@开头,一个简单的模板如下:

《Play for Java》学习笔记(三)template+Message
@(product: List[Product], count: Integer)
<dl>
@for(product <- products) { <!-- A Scala "for" loop -->
<dt>
<a href="@routes.Products.show(product.ean)"> <!-- A Scala function call -->
@product.ean - @product.name <!-- outputting Scala values -->
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
《Play for Java》学习笔记(三)template+Message

注解: 如果想用HTML的方式输出变量或表达式的值,而表示为Scala代码,使用@Html(), 如:

《Play for Java》学习笔记(三)template+Message
// boldName = "<b>world</b>
Hello @Html(boldName)!
《Play for Java》学习笔记(三)template+Message

二、表达式的范围Scope--in-line expression

1. 这里的"-"是文本,有两个Scala表达式

《Play for Java》学习笔记(三)template+Message

2. a multi-token statement

《Play for Java》学习笔记(三)template+Message

3. a multi-statement expression

《Play for Java》学习笔记(三)template+Message

4. 注解

《Play for Java》学习笔记(三)template+Message《Play for Java》学习笔记(三)template+Message

  • 应该尽量避免如1,2所示的复杂的表达式
  • Scala代码格式参见: http://docs.scala-lang.org/style/scaladoc.html

三、模板的基本功能说明

1、模板参数

《Play for Java》学习笔记(三)template+Message
@* general template parameters*@
@(customer: models.Customer, orders: List[models.Order])
@* default values for parameters*@
@(title: String = "Home")
@* several parameter groups  *@
@(title:String)(body: Html)
《Play for Java》学习笔记(三)template+Message

模板参数应写在template的最开头

2. Iterating

  • 一般List的循环结构见上(略)
  • Map的循环
《Play for Java》学习笔记(三)template+Message
@(eanMap: Map[Long, Product])
......
<dl>
@for((ean, product) <- eanMap) {
<dt>
<a href="@routes.Products.show(ean)">
    @ean - @product.name
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
......
《Play for Java》学习笔记(三)template+Message
  • Set的循环
《Play for Java》学习笔记(三)template+Message
@(products: Set[Product])
......
<dl>
@for((product, i) <- products.zipWithIndex) {
<dt>
<a href="@routes.Products.show(product.ean)">
Product @i - @product.name
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
......
《Play for Java》学习笔记(三)template+Message

 3. reusable blocks

《Play for Java》学习笔记(三)template+Message
@display(product: models.Product) = {
  @product.getName() ($@product.getPrice())
}

<ul>
@for(product <- products) {
  @display(product)   <!--调用display -->
} 
</ul>
《Play for Java》学习笔记(三)template+Message

还可以写成pure code blocks(不知道该如何翻译~~~)

《Play for Java》学习笔记(三)template+Message
@title(text: String) = @{
  text.split(‘ ‘).map(_.capitalize).mkString(" ")
}
 <h1>@title("hello world")</h1>
《Play for Java》学习笔记(三)template+Message

4. reusable values

《Play for Java》学习笔记(三)template+Message
@defining(user.getFirstName() + " " + user.getLastName()) { fullName =>
  <div>Hello @fullName</div>
}
《Play for Java》学习笔记(三)template+Message

使用@defining()

四、模板的模块化

《Play for Java》学习笔记(三)template+Message

main.scala.html

《Play for Java》学习笔记(三)template+Message
@(title: String = "Paperclips")(content: Html)  <!-- New parameter ‘content‘ --> 
<!DOCTYPE html>
<html>
<head>
<title>paperclips.example.com</title>
<link href="@routes.Assets.at("stylesheets/main.css")" rel="stylesheet">
</head>
<body>
    <div id="header">
    <h1>Products</h1>
    </div>
        @navigation     <!--Navigation template  -->
    <div id="content">
        @content     <!--Page content must be inserted here --> 
</div> <footer> <p>Copyright ?2012 paperclips.example.com</p> </footer> </body> </html>
《Play for Java》学习笔记(三)template+Message

view.scala.html

《Play for Java》学习笔记(三)template+Message
@(products: Seq[Product])
@main("Products") {   <!--call main template -->
<h2>Products</h2>
<ul class="products">
    @for(product <- products) {
    <li>
        <h3>@product.name</h3>
        <p class="description">@product.description</p>
    </li>
    }
</ul>
}
《Play for Java》学习笔记(三)template+Message

调用:  views.html.render(content)

navigation.scala.html

《Play for Java》学习笔记(三)template+Message
@()
<nav class="navbar navbar-inverse navbar-fixed-top" id="navigation">
    <div class="navbar-inner">
        <div class="container">
        <a class="brand" href="@routes.Products.index()">Products Catalog</a>
        <ul class="nav">
            <li><a href="@routes.Products.index()">Home</a></li>
            <li><a href="@routes.Products.list()">Products</a></li>
            <li><a href="">Contact</a></li>
        </ul></div>
    </div>
</nav>
《Play for Java》学习笔记(三)template+Message

五、Message的使用和国际化(internationalization)

1. 国际化(internationalization)

在conf/application.conf中设置

《Play for Java》学习笔记(三)template+Message
application.langs="en,en-US,fr"
《Play for Java》学习笔记(三)template+Message

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

《Play for Java》学习笔记(三)template+Message
public static Result index() {
     return ok(request().acceptLanguages());
}
《Play for Java》学习笔记(三)template+Message

 参考:http://www.playframework.com/documentation/2.2.x/JavaTemplates

《Play for Java》学习笔记(三)template+Message,布布扣,bubuko.com

《Play for Java》学习笔记(三)template+Message

上一篇:JavaScript 作用域和闭包


下一篇:Spring和Hibernate集成配置