`
desert3
  • 浏览: 2160561 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Play Framework template engine模板引擎&模板隐含变量

 
阅读更多
Play有一个高效的用来动态生成HTML, XML, JSON, 任何文本格式文档的模板系统。模板引擎使用Groovy(一种JVM平台上的动态语言)作为表达式语言。包含一个可以用来创建可重用函数的标签系统。
模板保存在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
分享到:
评论

相关推荐

    Play framework框架

    Play Framework框架的架构是基于MVC模式的,分为模板引擎、控制器和模型三部分。模板引擎负责渲染页面,控制器负责处理请求和响应,模型负责存储和处理数据。该框架还提供了路由机制,用于将请求映射到对应的控制器...

    基于Scala语言的Play Framework模板引擎Twirl设计源码

    该项目是基于Scala语言的Play Framework模板引擎Twirl设计源码,包含129个文件,涵盖49个HTML模板文件、38个Scala源文件、11个Markdown文档、8个SBT构建文件、4个YAML配置文件、3个PNG图片文件、3个Shell脚本、2个...

    play framework api,play! framework api,play api

    1. **模块化设计**:Play Framework采用了模块化的设计,使得开发者可以方便地添加或替换特定功能,如模板引擎、持久化层等。 2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web...

    playframework中文教程.zip

    Play Framework 是一个开源的Web应用框架,主要针对Java和Scala开发者设计,它的核心理念是简化开发流程,提高开发效率,并且特别强调了RESTful架构风格。这个“playframework中文教程.zip”压缩包很可能是为了帮助...

    Play Framework Cookbook.pdf

    ### Play Framework Cookbook 知识点解析 #### 一、Play Framework 概览 - **框架简介**:Play Framework 是一个开源的 Web 开发框架,基于 Java 和 Scala 编程语言。它采用轻量级、非阻塞的服务端架构,特别适合...

    playFramework1.2.3

    4. **模板引擎**:Play Framework支持多种模板引擎,如JSP、Groovy模板(GSP)以及默认的Ebean模板语言。这些模板引擎使得视图层的开发更加简洁,同时支持动态语言的语法特性。 5. **内置数据库支持**:Play ...

    Play Framework2本教程

    Play Framework2是一个强大的Java和Scala应用开发框架,它以其简洁的API、快速的开发周期以及对Web标准的紧密集成而闻名。本教程旨在为初学者和有经验的开发者提供全面的指导,帮助他们掌握Play Framework2的核心...

    playframework 框架学习之路 1

    Play Framework 是一个基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式。在“Playframework框架学习之路 1”中,我们可能要探讨这个框架的基础概念、安装过程以及如何创建一个简单的应用...

    Play Framework应用程序框架 v2.7.9.zip

    Play Framework是一款基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提供高效、简洁且可测试的开发环境。标题中的"v2.7.9"指的是该框架的特定版本,通常每个新版本会包含性能优化...

    Play framework 2.0 -第一个应用程序

    《Play Framework 2.0 - 创建你的第一个应用程序》 Play Framework 2.0 是一个开源的Web应用框架,它基于Scala和Java语言,遵循“模式-动作”(Action)架构,提供了一种轻量级、敏捷开发的方式。本篇文章将引导你...

    Play-Utils是一个专门为PlayFramework开发的实用工具包模块

    在 Play Framework 中,模板引擎用于生成 HTML 输出。Play-Utils 提供了类型安全的助手方法,避免了模板中常见的类型转换错误,同时提供了更丰富的模板功能,如自定义标签和辅助函数。 2. **数据库操作增强**: ...

    PlayFramework框架验证.pdf

    PlayFramework是一个高性能的Java和Scala框架,它支持Web应用的快速开发,并且主要面向RESTful应用程序。在PlayFramework中,为了确保数据的准确性和合法性,通常会在数据保存到数据库之前,对HTTP请求中的参数进行...

    play,play framework资料大全

    这份文档通常会涵盖Play Framework的基本概念、安装步骤、项目结构、路由配置、模板引擎、控制器、模型、数据库集成、测试以及部署等核心内容。通过阅读这份文档,开发者可以全面了解Play Framework的各个方面,快速...

    Play Framework

    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 框架手册 word 版

    6. **模板引擎**:Play提供了强大的模板引擎,支持表达式、装饰器、标签、动作、消息、注释、脚本等语法,便于构建动态视图。模板继承和自定义标签允许灵活的布局和功能扩展。 7. **数据验证**:Play提供了一套完整...

    Play Framework Cookbook

    ### Play Framework Cookbook 知识点解析 #### 一、Play Framework 概览 - **定义与背景**:Play Framework 是一款基于 Java 和 Scala 的高性能、轻量级 Web 开发框架。它采用 RESTful 架构设计,支持热重载功能,...

    playframework框架项目部署文档

    《Play Framework框架项目部署详解》 Play Framework是一个强大的、基于Java和Scala的开源Web应用程序框架,它采用模型-视图-控制器(MVC)架构模式,以简洁的API和直观的开发体验受到开发者喜爱。本篇文章将详述...

    play framework 框架个人笔记

    本文将深入探讨Play Framework的基本概念、常用命令、Eclipse调试方法、模式、控制器、工具包、session管理和模板引擎等方面。 1. **常用命令** - `play new &lt;项目名&gt;`:创建一个新的Play项目。 - `play run ...

    Play framework 2.0入门教程(三)的源代码,Play留言板

    Play Framework 2.0 是一个基于Java和Scala的开源Web应用程序框架,以其“写后即运行”的特性而闻名。这个入门教程的第三部分是关于如何使用Play Framework构建一个简单的留言板应用。在这里,我们将深入探讨Play ...

Global site tag (gtag.js) - Google Analytics