博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
Hibernate第十二篇【二级缓存介绍、缓存策略、查询缓存、集合缓存】
查看>>
Python 为何能坐稳 AI 时代头牌语言
查看>>
JS专题之数组去重
查看>>
抱歉,Xposed真的可以为所欲为——5.我自己刷的Xposed凭什么不给我用
查看>>
一个简单的可展开和收缩的tableview
查看>>
鹅厂干货 | 腾讯游戏APP协议迭代的那些事
查看>>
深入理解Plasma(三)Plasma MVP
查看>>
SQL注入速查表(上)
查看>>
聊聊storm的WindowedBoltExecutor
查看>>
谈谈fail-fast与fail-safe是什么以及工作机制
查看>>
一个滑动特效
查看>>
react-native打包
查看>>
PWA 一隅
查看>>
深入浅出换肤相关技术以及如何实现
查看>>
Redis 基础、高级特性与性能调优
查看>>
React native 第三方组件 React native swiper
查看>>
接口幂等设计
查看>>
编程入门指南
查看>>
移动端的自适应方案—REM
查看>>
你真的懂volatile吗
查看>>