来玩Play框架03 模板
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
在上一章节中,我把字符串通过ok()返回给客户。我可以把一个完整的html页面放入字符串中返回。然而,现代的框架都提供了更好的方法——模板。模板将视图和数据分开。服务器可以把不同的数据传递给同一个模板,从而产生不同的页面。 Play同样也有一套模板系统。模板的大部分内容都可以用html写,作为视图,而在一些特别的地方,预留给数据参数。在模板中,用Scala语言来调用参数。
使用模板
我首先创建一个模板,纯粹起视图功能。在app/views文件夹中,新建文件index.scala.html (如果已有,则删除并重新创建)。
<!DOCTYPE html>
<html>
<header>
<title>Play</title>
</header> <body>
<p>Hello World! Start using the Template.</p>
</body>
</html>
这个模板是个纯粹的html文件,是最简单的模板形式。
修改app/controllers/Application.java:
package controllers; import play.*;
import play.mvc.*; public class Application extends Controller {
public static Result index() {
return ok(views.html.index.render());
}
}
ok()中接收的是views.html.index.render(),实际上就是app/views/index.scala.html这一模板的render()方法。Play会根据模板,自动生成相应的类。
*** 也可以用import引入views.html.index,而不是使用完整的类路径。
访问页面:

模板语言
这一部分,我把对象作为参数传给模板,然后在模板中显示对象中包含的数据。修改index.scala.html:
@(title: String, content: String) <!DOCTYPE html>
<html>
<header>
<title>@title</title>
</header> <body>
<p>@(content) Start using the template.</p>
</body>
</html>
上面的第一行,以@符号开头,说明了该模板所接收的两个参数,即String类型的title和content。在模板中,用@符号和参数名,来调用参数。参数名周围可以用括号"()",以区分正文。
修改动作:
public static Result index() {
return ok(views.html.index.render("Play", "Hello World! Parameters passed. "));
}
这里传递两个字符串给模板。最终显示的结果中,两个字符串将填充在模板中的适当位置。

上面把一个对象传递给模板。我们还可以在模板中调用对象的属性或方法:
@object.method()
@object.field
模板控制
我还可以用Scala的语法,在模板中实现更复杂的逻辑。比如下面的模板中使用循环:
@(title: String, content: String, lines: List[String]) <!DOCTYPE html>
<html>
<header>
<title>@title</title>
</header> <body>
<p>@(content) Start using the template.</p>
<ul>
@for(line <- lines) {
<li>@line</li>
}
</ul>
</body>
</html>
循环是@for实现的。@后面不仅可以是一个对象,还可以是一个完整的Scala语法。
修改动作,把一个字符串类型的表作为参数传递给模板:
package controllers; import play.*;
import play.mvc.*; import java.util.List;
import java.util.ArrayList; public class Application extends Controller {
public static Result index() {
List<String> lines = new ArrayList<String>();
lines.add("a");
lines.add("b");
lines.add("c");
return ok(views.html.index.render("Play", "Hello World!", lines));
}
}
得到下面的页面:

模板中还可以有if选择结构,比如
@if(item) {
<p>True</p>
} else {
<p>False</p>
}
根据参数item的真假,if结构显示不同的内容。
其它
在@* *@中加入注释
由于@的特殊功能,为了在模板中显示"@"字符,需要使用@@。
总结
模板
render()
@
欢迎继续阅读“Java快速教程”系列文章
来玩Play框架03 模板的更多相关文章
- Django(框架、模板)
day65 参考:https://www.cnblogs.com/liwenzhou/p/8296964.html Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间 ...
- 第三百一十节,Django框架,模板语言
第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...
- Django框架之模板语法【转载】
Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...
- TP框架中模板赋值
TP框架中模板赋值 $this->assign('name',$value); $this->name = $value; // 两种写法是等效的
- Django框架 之 模板语言
Django框架 之 模板语言 浏览目录 标签 过滤器 一.标签 Tags 1.普通变量 普通变量用{{ }} 变量名由数字.字母.下划线组成 点.在模板语言中用来获取对象相应的属性值 示例: 1 2 ...
- Django 03 模板路径、模板变量、常用的过滤器
Django 03 模板路径.模板变量.常用的过滤器 一.模板路径 #1.在每个app下面添加一个templates文件 #2.在项目views.py里面第33行INSTALLED_APPS里面添加上 ...
- Java自动化测试框架-03 - TestNG之Test Group篇 - 我们一起组团打怪升级(详细教程)
简介 其实这篇文章的group宏哥在上一篇中就提到过,但是就是举例一笔带过的,因此今天专门有一篇文章来讲解Group的相关知识.希望大家茅塞顿开 ,有着更进一步认识和了解测试组. 一.Test Gro ...
- Django框架2——模板
django框架2--模板 直接将HTML硬编码到你的视图里却并不是一个好主意: 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改. 站点设计的修改往往比底层 Python 代码的修 ...
- Django框架04 /模板相关、别名/反向解析/路由分发
Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...
随机推荐
- 【夯实PHP基础】PHP常用类和函数总结
本文地址 代码提纲: 1. 字符串处理类及函数 2. 数组处理类及函数 3 .web处理类及函数 将常用的PHP的类和函数总结到这里,主要是 自己用过的,比较有感觉. 1. [字符串处理] 1)[ut ...
- 总结30个CSS3选择器
或许大家平时总是在用的选择器都是:#id .class 以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...
- 在将 varchar 值 'xinpian' 转换成数据类型 int 时失败?
把int类型的值修改为varchar类型的值
- FineReport关于tomcat集群部署的方案
多台服务器集群后,配置权限.数据连接.模板.定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器. 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件.finedb/ ...
- Python学习实践------正向最大匹配中文分词
正向最大匹配分词: 1.加载词典文件到集合中,取词典文件中最大长度词的length 2.每次先在句子中按最大长度分割,然后判断分割的词是否存在字典中,存在则记录此词,调整起始点. 3.不存在则按最大长 ...
- MEF学习
一. 什么是MEF MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置. 扩 ...
- 《图解HTTP》读书笔记
目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书<HTTP权威指南>与<TCP/IP详解,卷1>,但内容晦涩难懂,学习难度较大.其实,HTTP协议并不复杂,理 ...
- CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能
CSharpGL(24)用ComputeShader实现一个简单的图像边缘检测功能 效果图 这是红宝书里的例子,在这个例子中,下述功能全部登场,因此这个例子可作为使用Compute Shader的典型 ...
- Entity Framework 与 面向对象
说要分享,我了个*,写了一半放草稿箱了两个星期都快发霉了,趁着周末写完发出来吧. 文章分为五部分: 基础.类讲述的是用到的一些EF与面向对象的基础: 业务是讲怎么划分设计业务: 设计模式和工作模式讲述 ...
- 海量数据处理利器greenplum——初识
简介及适用场景 如果想在数据仓库中快速查询结果,可以使用greenplum. Greenplum数据库也简称GPDB.它拥有丰富的特性: 第一,完善的标准支持:GPDB完全支持ANSI SQL 200 ...