参考:
https://blog.csdn.net/xbgordon/category_8310615.html
原文链接:https://blog.csdn.net/xbgordon/article/details/83765519
Play 框架有自己的模板引擎来生成HTML页面,该引擎使用 Groovy 做为表达式语言。你可以直接使用 Groovy 语言来创建动态的网页,但并无需学习 Groovy 所有的知识,你需要了解的只是跟 Java 非常相近的一部分。Play 将所有的模板文件都放在 app/views 目录下,所有页面都是在请求时即时解析的。
优势:
- 动态编译,无论你修改Entity,Controller或者view,都无需重启服务器。
- 视图采用了Groovy作为模板引擎,让表示层真正做到了开发高效简洁。
Play的页面模版有一套非常简单易用的tag机制,复用view非常的方便。 - Play可以方便的组织测试数据,而这些数据是一个文本结构,不依赖于特定数据库。也就是说即使用的是一个内存数据库,也可以很方便的组织测试数据。
- Play有很多的静态方法,在Controller和Model中都有,静态方法带来的最大麻烦就是难以继承。
- 拥有精确的错误定位机制,当错误发生的时候,可以精确的定位到错误代码的位置。
- 速度很快,启动快,运行的速度也十分快。
创建运行生成eclipse项目的命令
- 创建一个工程
打开DOS。 输入 play new webplay
意思是创建一个 名字叫 webplay 的工程。但是该工程暂时无法导入ECLIPSE - 测试过工程是否成功
打开DOS 输入 play run webplay
意思是 测试工程是否运行成功。下面会提示测试路径。表示启动成功.
3. 创建Eclipse 部署文件
运行 play eclipsify webplay
意思是创建 eclipse 部署文件
4.工程导入到Eclipse
跟普通项目导入一样
接下来我们创建一个简单应用
1 | oschina@oschina.net:~/dev/play$ /usr/share/play/play new views |
接下来检查生成的文件,进入 app/views 目录,我们可以看到下面这些内容:
- Application : 存放应用主 controller 程序的模板
- errors : 存放错误页面模板,例如 404、500等
- main.html : 主页面模板
打开 Application/index.html ,代码如下:第一行表明此模板扩展自 main.html,接下来使用了 Play 框架的 set 指令来设置页面的标题,这些指令都要进行关闭,最后一行打印一行欢迎信息。然后我们再来看看 main.html 模板:1
2
3#{extends 'main.html' /}
#{set title:'Home' /}
#{welcome /}这个模板中包含一些特殊的指令:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!DOCTYPE html>
<html>
<head>
<title>#{get 'title' /}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" media="screen" href="@{'/public/stylesheets/main.css'}">
#{get 'moreStyles' /}
<link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
<script src="@{'/public/javascripts/jquery-1.4.2.min.js'}" type="text/javascript" charset="utf-8"></script>
#{get 'moreScripts' /}
</head>
<body>
#{doLayout /}
</body>
</html> - #{get ‘title’ /} : 获取变量 title 的值,该值仅在模板页面中有效
- @{‘/public/stylesheets/main.css’} : 引入某个静态资源
- #{doLayout /} : 此处插入子模板的内容,在本例中就是前面提到的 index.html 页面,index.html 扩展自 main.html
如何在模板间传递参数呢?
传递参数很重要,例如我们在 controller 中读取一些数据,并将这些数据传递到 view 中进行显示。在 Play 框架中可以使用 render 方法来处理,例如:index 方法中向模板传递了一个名为 hello 的变量,要在模板中获取这个变量的值,只需 ${hello} 即可:1
2
3
4
5
6
7
8package controllers;
import play.mvc.*;
public class Application extends Controller {
public static void index() {
String hello = "Hello World from Controller !";
render(hello);
}
}
‘’’
#{extends ‘main.html’ /}
#{set title:’Home’ /}
Hello from the view
${hello}
‘’’
来个更复杂点的类
‘’’
package models;
public class Book {
private final String title;
public Book(String title) {
super();
this.title = title;
}
public String getTitle() {
return title;
}
}
1 | 然后在 controller 传递此类的实例: |
#{extends ‘main.html’ /}
#{set title:’Home’ /}
Hello from the view
I’ve a book for you “${book.title}”.
1 | 这里使用了 JavaBean 的 getting 方法,因此我们的Bean 必须有 getTitle 方法。 |
${book.title.raw()}
1 | 但这不是一个好习惯,仅在你确认会带来什么后果时才使用。 |
{Will not be evaluated by the template engine}
1 | ## 数组和列表 |
public static void index() {
List
books.add(new Book(“Hello Play !”));
books.add(new Book(“Hello Template !”));
books.add(new Book(“Hello Engine !”));
render(books);
}
1 | 模板中使用该列表对象的代码如下: |
#{extends ‘main.html’ /}
#{set title:’Home’ /}
I’ve some books for your :
-
#{list items:books, as:'book'}
- ${book.title} #{/list}
1 | ## 使用脚本 |
-
#{list items:books, as:'book'}
%{
bookTitle = book.title.toUpperCase();
}%
- ${bookTitle} #{/list}
1 | 可以做包括迭代、条件等一大堆复杂的事情,但记住,不要在模板中做过于复杂的功能,将这些业务逻辑放在 controller 或者是 models 中,模板应该越简单越好。 |
-
#{list items:_items, as:'book'}
%{
bookTitle = book.title.toUpperCase();
}%
- ${bookTitle} #{/list}
1 | 使用 '_' 来获取参数,本例中是 _items,有了这个自定义的tag,我们就可以将上面那个模板修改为: |