- 浏览: 2141023 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (401)
- Agile (16)
- Apache Commons (3)
- Architecture (8)
- DB.MongoDB (5)
- DB.Mysql (3)
- DB.Oracle (34)
- DirectoryService (1)
- DotNet (1)
- English (3)
- Groovy (0)
- Html (28)
- Java (67)
- Java.Aixs (7)
- Java.Cache (2)
- Java.jPBM (1)
- Java.Resin (6)
- Java.Spring (4)
- Java.Struts2 (5)
- Java.Tomcat (16)
- Javascript (45)
- Javascript.Google Map (2)
- Javascript.Jquery (8)
- Life (15)
- Maven&Ant (4)
- Network (5)
- OS.Linux (45)
- OS.Windows (10)
- OS.Windows.Office (1)
- PlayFramework (15)
- Python (28)
- Reading notes (11)
- Security (13)
- Server.Apache (3)
- Server.Nginx (7)
- Test (6)
- Tool (15)
- Work.Solution (15)
- Other (20)
- SSO&CAS&Identity (13)
最新评论
-
hutuxiansheng123:
防火墙、Iptables、netfilter/iptables、NAT 概述 -
dacoolbaby:
非常棒的正则表达式,非常适用。万分感谢。
用python分析nginx的access日志 -
loot00:
您好! 我也遇到了相同的错误信息。我是用f_link_lob ...
LOB variable no longer valid after subsequent fetch -
feihangchen:
@OnApplicationStop public clas ...
Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务 -
洞渊龙王:
谢谢了
www.w3.org被qiang导致logback报错:Connect reset
Play有一个高效的用来动态生成HTML, XML, JSON, 任何文本格式文档的模板系统。模板引擎使用Groovy(一种JVM平台上的动态语言)作为表达式语言。包含一个可以用来创建可重用函数的标签系统。
模板保存在app/views目录下。
模板语法:
模板文件是一个包含用来动态生成内容的占位符的文本文件。模板中的动态元素是使用Groovy语言编写的。Groovy的语法和Java很类似。
动态元素在模板执行阶段被处理。渲染后的结果被作为http响应的一部分而输出到客户端。
表达式:${…},声明其是一个动态的表达式。表达式的执行结果会被插入到${…} 占位符所在的位置中。
标签:#{tagName /},标签式一个模板片段,被使用是通常需要传入一些参数。如果标签只有一个参数,那么根据约定,叫它为“arg”同时, 同时参数名可以省略。
例子:
我们使用用script 标签来加载javascript文件。标签必须被关闭,要嘛直接关闭,要嘛用关闭标签关闭,如下。
#{script 'jquery.js' /}
#{script 'jquery.js'}#{/script}
如果含有多个参数的标签名,参数名不能省略,如下的list标签。
动作:@{…} 或者 @@{…}
我们可以使用Router来根据一个特殊的路由规则反向生成一个URL。而在模板中,我们使用@{…}来生成URL。
例子:
@@{…}动作做和@{…}一样的事情,不同之处在于它生成的是相对URL(对于email的处理尤其有用。)
多语言消息:&{…}用来做国际化
譬如在conf/messages文件中设置下面的值
clientName=The client name is %s
在模板中如下使用:
<h1>&{'clientName', client.name}</h1>
注释:*{…}* 注释语法,会被模板引擎自动忽略。
*{**** Display the user name ****}*
<div class="name">
${user.name}
</div>
Java脚本:%{…}%
脚本比表达式复杂很多。脚本能声明一些变量和使用一些语句。使用%{…}%来插入脚本。
%{
fullName = client.name.toUpperCase()+' '+client.forname;
}%
<h1>Client ${fullName}</h1>
脚本也能直接使用out来输出内容
%{
fullName = client.name.toUpperCase()+' '+client.forname;
out.print('<h1>'+fullName+'</h1>');
}%
同时脚本也能用来做循环遍历等操作
<h1>Client ${client.name}</h1>
<ul>
%{
for(account in client.accounts) {
}%
<li>${account}</li>
%{
}
}%
</ul>
需要特别强调的是,模板并不是一个用来做复杂操作的地方。所以更加推荐使用标签,或者把复杂计算移动到控制器、模型中区。
模板继承:
模板能继承其他模板,譬如能被作为其他模板的一部分包含进来。
要继承其他模板,使用extends语法,如下:
#{extends 'main.html' /}
<h1>Some code</h1>
main.html模板是一个单独的模板,它使用#{doLayout /}
来包含其他内容。
<h1>Main template</h1>
<div id="content">
#{doLayout /}
</div>
自定义标签:
你能很容易地为你的应用程序创建标签。标签式一个存储在app/views/tags目录下的模板文件,模板名就是标签名。
如创建一个hello标签,只需要创建包含如下内容的文件app/views/tags/hello.html
Hello from tag!
不需要做任何配置,你可以使用如下使用标签。
#{hello /}
接收标签参数:
标签参数是曝露的模板变量,变量名以下划线开始。如
Hello ${_name} !
使用的时候就可以如下传递标签参数
#{hello name:'Bob' /}
如果你的标签只有一个参数,你可以直接使用_arg作为默认参数,它的名字是隐含的。
Hello ${_arg}!
调用的时候,也可以同时省略参数名
#{hello 'Bob' /}
使用标签体(即标签内部的内容,而不是标签的属性):
如果你的标签支持body,那么你可以使用doBody来引用传递进来的标签体内容
Hello #{doBody /}!
使用的使用,如下传递标签体内容
#{hello}
Bob
#{/hello}
在模板中使用扩张的java对象方法:
在模板引擎中使用java对象时,这些对象已经被增加了一些新的方法。这些方法在标准的java类中并不存在,它们是被模板引擎动态加进来的。
如为了在模板中对数字进行格式化,format方法被加到java.lang.Number中。
然后我们就可以再模板中如下进行数字格式化操作。
<ul>
#{list items:products, as:'product'}
<li>${product.name}. Price : ${product.price.format('## ###,00')} €</li>
#{/list}
</ul>
自定义格式化:
你可能需要一些比较特殊的格式化操作。
你只需简单地继承play.templates.JavaExtensions类,然后增加自定义的格式化方法,如下
自定义格式化方法必须是静态的,并且返回值应该是字符串(被写回到画面上)。第一个参数就是被传递进来的对象。
然后你就可以如下使用:
<em>Price: ${123456.324234.ccyAmount()}</em>
模板引擎在play启动是会自动检测到这个自定义的扩张。你只需要重启下服务器以使得扩张方法生效。
模板中的隐含变量:
所有被加到renderArgs中的变量都直接变成模板中的变量,在模板中直接使用。
譬如,你可以如下把控制器中把一个“user”bean注入到模板中。
renderArgs.put("user", user );
当从action中渲染模板时,框架同时会把下面的对象中加到模板中
即模板中可以直接使用的变量:
模板保存在app/views目录下。
模板语法:
模板文件是一个包含用来动态生成内容的占位符的文本文件。模板中的动态元素是使用Groovy语言编写的。Groovy的语法和Java很类似。
动态元素在模板执行阶段被处理。渲染后的结果被作为http响应的一部分而输出到客户端。
表达式:${…},声明其是一个动态的表达式。表达式的执行结果会被插入到${…} 占位符所在的位置中。
标签:#{tagName /},标签式一个模板片段,被使用是通常需要传入一些参数。如果标签只有一个参数,那么根据约定,叫它为“arg”同时, 同时参数名可以省略。
例子:
我们使用用script 标签来加载javascript文件。标签必须被关闭,要嘛直接关闭,要嘛用关闭标签关闭,如下。
#{script 'jquery.js' /}
#{script 'jquery.js'}#{/script}
如果含有多个参数的标签名,参数名不能省略,如下的list标签。
<h1>Client ${client.name}</h1> <ul> #{list items:client.accounts, as:'account' } <li>${account}</li> #{/list} </ul>
动作:@{…} 或者 @@{…}
我们可以使用Router来根据一个特殊的路由规则反向生成一个URL。而在模板中,我们使用@{…}来生成URL。
例子:
<h1>Client ${client.name}</h1> <p> <a href="@{Clients.showAccounts(client.id)}">All accounts</a> </p> <hr /> <a href="@{Clients.index()}">Back</a>
@@{…}动作做和@{…}一样的事情,不同之处在于它生成的是相对URL(对于email的处理尤其有用。)
多语言消息:&{…}用来做国际化
譬如在conf/messages文件中设置下面的值
clientName=The client name is %s
在模板中如下使用:
<h1>&{'clientName', client.name}</h1>
注释:*{…}* 注释语法,会被模板引擎自动忽略。
*{**** Display the user name ****}*
<div class="name">
${user.name}
</div>
Java脚本:%{…}%
脚本比表达式复杂很多。脚本能声明一些变量和使用一些语句。使用%{…}%来插入脚本。
%{
fullName = client.name.toUpperCase()+' '+client.forname;
}%
<h1>Client ${fullName}</h1>
脚本也能直接使用out来输出内容
%{
fullName = client.name.toUpperCase()+' '+client.forname;
out.print('<h1>'+fullName+'</h1>');
}%
同时脚本也能用来做循环遍历等操作
<h1>Client ${client.name}</h1>
<ul>
%{
for(account in client.accounts) {
}%
<li>${account}</li>
%{
}
}%
</ul>
需要特别强调的是,模板并不是一个用来做复杂操作的地方。所以更加推荐使用标签,或者把复杂计算移动到控制器、模型中区。
模板继承:
模板能继承其他模板,譬如能被作为其他模板的一部分包含进来。
要继承其他模板,使用extends语法,如下:
#{extends 'main.html' /}
<h1>Some code</h1>
main.html模板是一个单独的模板,它使用#{doLayout /}
来包含其他内容。
<h1>Main template</h1>
<div id="content">
#{doLayout /}
</div>
自定义标签:
你能很容易地为你的应用程序创建标签。标签式一个存储在app/views/tags目录下的模板文件,模板名就是标签名。
如创建一个hello标签,只需要创建包含如下内容的文件app/views/tags/hello.html
Hello from tag!
不需要做任何配置,你可以使用如下使用标签。
#{hello /}
接收标签参数:
标签参数是曝露的模板变量,变量名以下划线开始。如
Hello ${_name} !
使用的时候就可以如下传递标签参数
#{hello name:'Bob' /}
如果你的标签只有一个参数,你可以直接使用_arg作为默认参数,它的名字是隐含的。
Hello ${_arg}!
调用的时候,也可以同时省略参数名
#{hello 'Bob' /}
使用标签体(即标签内部的内容,而不是标签的属性):
如果你的标签支持body,那么你可以使用doBody来引用传递进来的标签体内容
Hello #{doBody /}!
使用的使用,如下传递标签体内容
#{hello}
Bob
#{/hello}
在模板中使用扩张的java对象方法:
在模板引擎中使用java对象时,这些对象已经被增加了一些新的方法。这些方法在标准的java类中并不存在,它们是被模板引擎动态加进来的。
如为了在模板中对数字进行格式化,format方法被加到java.lang.Number中。
然后我们就可以再模板中如下进行数字格式化操作。
<ul>
#{list items:products, as:'product'}
<li>${product.name}. Price : ${product.price.format('## ###,00')} €</li>
#{/list}
</ul>
自定义格式化:
你可能需要一些比较特殊的格式化操作。
你只需简单地继承play.templates.JavaExtensions类,然后增加自定义的格式化方法,如下
package ext; import play.templates.JavaExtensions; public class CurrencyExtensions extends JavaExtensions { public static String ccyAmount(Number number, String currencySymbol) { String format = "'"+currencySymbol + "'#####.##"; return new DecimalFormat(format).format(number); } }
自定义格式化方法必须是静态的,并且返回值应该是字符串(被写回到画面上)。第一个参数就是被传递进来的对象。
然后你就可以如下使用:
<em>Price: ${123456.324234.ccyAmount()}</em>
模板引擎在play启动是会自动检测到这个自定义的扩张。你只需要重启下服务器以使得扩张方法生效。
模板中的隐含变量:
所有被加到renderArgs中的变量都直接变成模板中的变量,在模板中直接使用。
譬如,你可以如下把控制器中把一个“user”bean注入到模板中。
renderArgs.put("user", user );
当从action中渲染模板时,框架同时会把下面的对象中加到模板中
即模板中可以直接使用的变量:
- session, the Session object
- flash, the Flash scope
- request, the current Request
- params, HTTP params
- play, a reference to play.Play
- lang, the current language
- messages, the messages map
- out, the Writer
发表评论
-
xml 字符串和xml Document相互转换、xml Document内容输出到http response
2012-11-05 10:07 5508import java.io.ByteArrayOutpu ... -
isAssignableFrom & isInstance
2012-11-02 14:34 1181java.lang.Object extended by ja ... -
Struts 1.1 ExceptionHandler(转)
2012-11-02 10:20 1368转自:SSH项目中利用Exce ... -
X.509、数字签名、CA(Certificate Authority)、自签名证书、PKI
2012-10-18 14:22 6260X.509是由国际电联电信委员会(ITU-T)为单点登录(SS ... -
keytool、keystore、jarsigner、生成自签名证书
2012-10-18 10:27 7954Keytool是Java的密钥和数字证书管理工具,位于JDK_ ... -
Play framework Controllers控制器、action链式调用、返回的HTTP状态码
2012-09-20 10:36 3169Playframework中的控制器放在controllers ... -
Java 类初始化顺序
2012-08-21 14:07 1061class Parent { // 静态变量 pu ... -
java嵌套类、静态嵌套类、内部类
2012-08-21 10:29 2080官网文档:Nested Classes 什么是嵌套类及内部类 ... -
java静态类、静态方法、静态变量、实例变量、线程本地变量、静态线程本地变量
2012-08-21 10:24 1848静态类: 只有嵌套类才 ... -
ProcessBuilder 和 Runtime
2012-07-17 09:26 20848ProcessBuilder.start() 和 Runtim ... -
Play framework 1.2.3 使用缓存、Memcached集成
2012-07-13 09:25 3677play框架包含一个缓存lib,这个lib是用来和Memcac ... -
Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务
2012-07-12 16:05 13351Play framework是一个web应 ... -
对称加密、PBE基于密码加密、PKCS
2012-07-05 11:07 7676对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信 ... -
(转)xml schema xsd 入门
2012-06-28 16:05 2432理解XML Schema: XML Schema 初步 (I) ... -
XmlRootElement JAXB注解
2012-06-28 15:23 39008@Retention(value=RUNTIME) @T ... -
jaxb xml数据绑定
2012-06-28 14:22 1301XML Schema编辑工具:XML Spy 常见的XML绑 ... -
(转)jpa 注解
2012-06-25 16:00 1289转自:jpa 注解 1.设置Po ... -
(转)JPA(Java Persistence API)简介
2012-06-25 14:20 1510转自JPA基础(一):全 ... -
Play 内置模板标签(1.2.3版本)
2012-06-18 14:03 4967Play framework 1.2.3 Built-in t ... -
play plugin插件 实现类似Servlet中的拦截器效果
2012-06-15 15:05 3618play plugin和module的区别见:play Mod ...
相关推荐
play framework api,play! framework api,play api
Play1使用groovy模板作为渲染引擎,而Play2使用Scala模板。在Play1时期,Japid作为groovy的替代品,非常受欢迎。而在Play官方使用Scala替换groovy后,性能虽然有所提高,但是限于Scala编译器的性能,仍然远不如Play2...
1. Play Framework 介绍 2. 创建和发布 Play 应用 2.1 创建 Play 的工程 2.2 Play 常用指令 2.3 Play 应用的 JVM 调优 3. 如何读取静态资源 4. Play框架的配置文件 5. 使用 Play 框架开发 Java 应用 5.1 HTTP...
Play Framework Cookbook.pdf
Play Framework最新教程(12年),play框架教程
Playframework 1.2.7 sdk zip包
playframework javaweb playframework javaweb
Mastering Play Framework for Scala
04.模板引擎 - 43 - 模板语法 - 43 - Expressions: ${…} - 44 - Template decorators : #{extends /} and #{doLayout /} - 44 - Tags: #{tagName /} - 45 - Actions: @{…} or @@{…} - 46 - Messages: &{…} - 46 ...
play framework2.01上半部分。
PlayFramework框架验证.pdf
This book is intended for those developers who are keen to master the internal workings of Play Framework to effectively build and deploy web-related apps.
Play framework框架
Play Framework是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需的所有东西。 Play Framework的...
通过简单的代码和思路写了play framework的简单的小例子,包括添加页面进行的routes配置,页面跳转,页面之间的数据传递等方面。暂时未使用h2内置数据库及ArrayList、HashMap在页面之间的数据传递。
Play Framework Cookbook
Leverage the awesome features of Play Framework to build scalable, resilient, and responsive applications First published: May 2015 274page
Play Framework是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应用所需的所有东西。 Play Framework的关键...
PlayFramework框架安全模块.pdf
Play Framework Cookbook playframework,play! 书中范例代码下载地址: https://github.com/spinscale/play-cookbook 292 pages Publisher: Packt Publishing (September 4, 2011) Language: English ISBN-10: ...