博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Play for Java》学习笔记(三)template+Message
阅读量:6426 次
发布时间:2019-06-23

本文共 3608 字,大约阅读时间需要 12 分钟。

说明: 这是本书的第八章内容,由于项目需要,提到前面来看啦~~~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
@navigation
@content

Copyright ©2012 paperclips.example.com

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

转载于:https://www.cnblogs.com/JoannaQ/p/3629823.html

你可能感兴趣的文章
虚拟化系列-Citrix XenServer 6.1 XenMotion与HA
查看>>
TFS创建团队项目(三)
查看>>
对发展的一点小感想
查看>>
示例化讲解RIP路由更新机制
查看>>
eclipse不能自动编译工程的解决方法
查看>>
Powershell管理系列(九)删除Exchange用户邮箱中多余的电子邮件地址
查看>>
Swt/Jface进度条
查看>>
.NET建议使用的大小写命名原则
查看>>
Git:错误:error:src refspec master does not match any
查看>>
SSIS 数据类型和类型转换
查看>>
Oracle数据库“Specified cast is农田valid”
查看>>
数据层新思路,写数据库无关的数据层 ORM在数据库内做更为合适
查看>>
armv8(aarch64)linux内核中flush_dcache_all函数详细分析【转】
查看>>
房地产英语 Real estate词汇
查看>>
python接口自动化测试(八)-unittest-生成测试报告
查看>>
第 26 章 MySQL
查看>>
C#中三种截屏方式总结
查看>>
Spring.net 学习笔记之ASP.NET底层架构
查看>>
C# System.Windows.Forms.WebBrowser中判断浏览器内核和版本
查看>>
Java 动态太极图 DynamicTaiChi (整理)
查看>>