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

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

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

转载地址:http://lypfl.baihongyu.com/

你可能感兴趣的文章
Linux之父为过去的言行道歉,宣布离开社区反思
查看>>
Firefox 50优化Electrolysis
查看>>
家政APP开发,需要注意什么问题?
查看>>
畅谈云原生(上):云原生应用应该是什么样子?
查看>>
RedHat发布JBoss 7.2,完全支持Java EE 8规范
查看>>
看阿里毕玄与众位大咖如何解读团队文化、异地管理和技术前瞻性?
查看>>
iOS应用开发登陆Windows平台惹争议
查看>>
IBM 数据科学平台三大特性解决数据科学家协作问题
查看>>
C#的未来:扩展属性及更多
查看>>
Git实用技巧和命令
查看>>
ThoughtWorks技术雷达发布四大技术趋势
查看>>
无需安装的CLI才是最好的
查看>>
腾讯云助力广汽 打造新一代智能网联云平台
查看>>
IBM首家发布了公有云中的裸机Kubernetes
查看>>
准备好了?测试人员迟早会被要求测试包含区块链技术的解决方案
查看>>
AWS开源并扩展无服务器应用程序模型(SAM)实现
查看>>
3.9、在方法上使用@ModelAttribute注解
查看>>
如何用php实现一个web服务器
查看>>
Camel - 软负载管理中间件,通过界面及接口管理Nginx集群 来自大众点评~
查看>>
答疑:能在 setter 方法中调用父类么?
查看>>