首页 > 编程语言 > 详细

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

时间:2014-03-28 14:28:23      阅读:573      评论:0      收藏:0      [点我收藏+]

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

一、模板template的定义

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

bubuko.com,布布扣
@(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>
bubuko.com,布布扣

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

bubuko.com,布布扣
// boldName = "<b>world</b>
Hello @Html(boldName)!
bubuko.com,布布扣

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

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

bubuko.com,布布扣

2. a multi-token statement

bubuko.com,布布扣

3. a multi-statement expression

bubuko.com,布布扣

4. 注解

bubuko.com,布布扣bubuko.com,布布扣

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

三、模板的基本功能说明

1、模板参数

bubuko.com,布布扣
@* general template parameters*@
@(customer: models.Customer, orders: List[models.Order])
@* default values for parameters*@
@(title: String = "Home")
@* several parameter groups  *@
@(title:String)(body: Html)
bubuko.com,布布扣

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

2. Iterating

  • 一般List的循环结构见上(略)
  • Map的循环
bubuko.com,布布扣
@(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>
......
bubuko.com,布布扣
  • Set的循环
bubuko.com,布布扣
@(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>
......
bubuko.com,布布扣

 3. reusable blocks

bubuko.com,布布扣
@display(product: models.Product) = {
  @product.getName() ($@product.getPrice())
}

<ul>
@for(product <- products) {
  @display(product)   <!--调用display -->
} 
</ul>
bubuko.com,布布扣

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

bubuko.com,布布扣
@title(text: String) = @{
  text.split(‘ ‘).map(_.capitalize).mkString(" ")
}
 <h1>@title("hello world")</h1>
bubuko.com,布布扣

4. reusable values

bubuko.com,布布扣
@defining(user.getFirstName() + " " + user.getLastName()) { fullName =>
  <div>Hello @fullName</div>
}
bubuko.com,布布扣

使用@defining()

四、模板的模块化

bubuko.com,布布扣

main.scala.html

bubuko.com,布布扣
@(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>
bubuko.com,布布扣

view.scala.html

bubuko.com,布布扣
@(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>
}
bubuko.com,布布扣

调用:  views.html.render(content)

navigation.scala.html

bubuko.com,布布扣
@()
<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>
bubuko.com,布布扣

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

1. 国际化(internationalization)

在conf/application.conf中设置

bubuko.com,布布扣
application.langs="en,en-US,fr"
bubuko.com,布布扣

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

bubuko.com,布布扣
public static Result index() {
     return ok(request().acceptLanguages());
}
bubuko.com,布布扣

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

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

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

原文:http://www.cnblogs.com/JoannaQ/p/3629823.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!