1、模板格式
Play默认的模板引擎是一种基于scala的安全模板引擎,尽管模板引擎使用Scala作为表达式语言,但是非常简单易学。参数类型使用后缀语法指定(例如: id:Long),泛型类型是使用[]符号(例如: list:java.util.List[String])。另外就是所有的错误信息可以在页面上直接显示。
模板文件的命名规则是*.scala.html,模板按着简单的命名将页面编译成scala函数,如果创建了一个index.scala.html模板文件,则会生成一个具有render()方法的index类,就像jsp最终会被编译成一个java文件一样。
模板的基本使用:
1、模板中使用@符号来表示动态数据开始
2、使用传递的相应数据时需要先声明
3、循环
4、判断
5、重用代码声明
模板中可以使用java类中的方法,方法是static的
布局模板
https://www.playframework.com/documentation/2.7.x/JavaTemplateUseCases
2、带有模板的依赖项注入
在模板顶部使用 @this(args) 语法声明构造函数,可以将twirl模板生成为类而不是静态对象。这意味着twirl模板可以直接注入到控制器中,并且可以管理它们自己的依赖项。例如:模板需要依赖Summarizer
声明模板,使用@this注册构造函数,依赖注入Summarizer
使用
3、通用模板用例
在twirl模板中,模板是简单的函数,可以以任何方式组合。
先介绍一下布局:
主布局模板的视图main.scala.html模板:
@(title: String)(content: Html)
<!DOCTYPE html>
<html><head><title>@title</title></head><body><section class="content">@content</section></body>
</html>
使用:
@main(title = "Home") {<h1>Home page</h1>}
接下来介绍一下标签的使用:
创建标签:views/tags/notice.scala.html,这个标签接收一个string类型值,然后根据值返回对应的html信息
使用标签level
说一下包含,在一个模板中可以随意引用其他模板,路径要正确:
4、在模板引擎中添加对自定义格式的支持
添加自定义格式的支持需要注意两个地方:
1、对格式执行文本集成过程
2、将文件扩展名与格式关联。
那么如何具体实现呢?先说一下实现的基本原理。
首先需要实现play.twirl.api.format<T>接口,该接口具有两个方法T raw(String text)和T escape(String text),分别用于集成静态和动态模板部件。其中T类型必须是play.twirl.api.appendable<T>特性的子类型,该特性定义如何将部件连接在一起,play提供了一个play.twirl.api.bufferedContent<T>抽象类,该类使用StringBuilder生成其结果,并实现play.twirl.api.content接口,因此play知道如何将其序列化为HTTP响应体。
说一下具体的开发实现。
需要先写一个自定义格式类,此类继承BufferedContent<T>抽象类,之后写一个转换类,用来定义文本的集成过程,此类实现play.twirl.api.format接口。下边举一个例子:
文本集成过程定义好之后,需要将文件扩展名与格式进行关联。在编译整个应用程序源文件之前,构建过程会将模板编译成.scala文件。TwirlKeys.templateFormats是定义文件扩展名和模板格式之间映射的类型的sbt设置。例如,如果要play使用自定义的HTML格式实现,则必须在build.sbt文件中写入以下内容,以便将.scala.html文件与自定义的my.HtmlFormat格式相关联: