当前位置: 首页 > news >正文

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

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

一、模板template的定义

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

@(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>

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

// boldName = "<b>world</b>
Hello @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])
......
<dl>
@for((ean, product) <- eanMap) {
<dt>
<a href="@routes.Products.show(ean)">
    @ean - @product.name
</a>
</dt>
<dd>@product.description</dd>
}
</dl>
......
  • Set的循环
@(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>
......

 3. reusable blocks

@display(product: models.Product) = {
  @product.getName() ($@product.getPrice())
}

<ul>
@for(product <- products) {
  @display(product)   <!--调用display -->
} 
</ul>

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

@title(text: String) = @{
  text.split(' ').map(_.capitalize).mkString(" ")
}
 <h1>@title("hello world")</h1>

4. reusable values

@defining(user.getFirstName() + " " + user.getLastName()) { fullName =>
  <div>Hello @fullName</div>
}

使用@defining()

四、模板的模块化

main.scala.html

@(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>

view.scala.html

@(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>
}

调用:  views.html.render(content)

navigation.scala.html

@()
<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>

五、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

相关文章:

  • [翻译] JTBorderDotAnimation
  • 2019春总结作业
  • bzoj1202
  • 内存泄露
  • HTML5标准学习 - 编码
  • iOS内存管理规则
  • javaBean规范
  • Scala基础知识笔记0-参考链接
  • 关于Thread类中三个interrupt方法的研究与学习(转)
  • Dynamics CRM2013 Server2012R2下部署ADFS和IFD遇到的问题
  • 小气的Static,坚强的Const,疑惑的Typedef,还有居安思危的Volatile
  • hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)...
  • Query DSL for elasticsearch Query
  • oracle导入导出exp,imp
  • 关于Assembly.CreateInstance()与Activator.CreateInstance()方法
  • github指令
  • JS字符串转数字方法总结
  • Laravel Mix运行时关于es2015报错解决方案
  • Laravel核心解读--Facades
  • React-redux的原理以及使用
  • REST架构的思考
  • Spark RDD学习: aggregate函数
  • 番外篇1:在Windows环境下安装JDK
  • 分类模型——Logistics Regression
  • 缓存与缓冲
  • 类orAPI - 收藏集 - 掘金
  • 新书推荐|Windows黑客编程技术详解
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四) Graphivz 颜色选择
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Core 版本不支持的问题
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core 依赖注入的基本用发
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 读取 JSON格式的数据
  • .NET和.COM和.CN域名区别
  • /etc/sudoer文件配置简析
  • /run/containerd/containerd.sock connect: connection refused
  • :not(:first-child)和:not(:last-child)的用法
  • [20170713] 无法访问SQL Server
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [C++]STL之map
  • [Editor]Unity Editor类常用方法
  • [hdu 3746] Cyclic Nacklace [kmp]