我正在使用Play做我的第一个项目!框架并通过" Play for Java"的第一章曼宁的书。
在第1.5节中,我们在应用/视图中构建了第一个模板,它被称为hello.scala.html
@(name:String)
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>Hello @name</h1>
</body>
</html>
要引用此模板,我在app / Application.java中使用以下行
public class Application extends Controller {
public static Result hello(String name) {
return ok(views.html.hello.render(name));
}
我还不熟悉Java,而且我试图逐字逐句地分解第三行的含义。
返回确定 - &gt;返回HTTP OK代码,到目前为止一直很好。
观看次数 - &gt;这是否意味着要查看app / views文件夹?或者它是存储在其他地方的视图路径的参考?
.html - &gt;这是数据类型吗?文件名?文件扩展名?如果模板被称为hello.scala.htm,那么这会改变吗?
.hello - &gt;这是引用文件的标题:hello.scala.html?
.render - &gt;所有模板都使用此方法吗?
(姓名) - &gt;我假设这是引用hello.scala.html
答案 0 :(得分:2)
了解Play模板引擎如何工作的关键是要意识到每个视图都会编译成Scala对象。您没有写下您正在使用的Play版本。在2.3中,您可以在 target / scala- {version} / twirl 目录中查看生成的Scala源。
观看次数 - &gt;这是否意味着要查看app / views文件夹?或者是一个 存储在其他地方的视图路径的参考?
views.html 只不过是放置对象的包。如果您在views目录中有 hello.scala.html 文件,Play会自动生成目录 views.html ,并将编译为对象的模板放入其中。 html 包是根据模板的扩展名生成的。所有带* .html扩展名的模板都将放在此包中。对于其他扩展,将生成不同的包。
请注意,如果您在 views / subdir / hello.scala.html 中创建视图,则生成的包结构将类似于 views.html.subdir 。< / p>
.html - &gt;这是数据类型吗?文件名?文件扩展名?如果 模板被称为hello.scala.htm而不是这会改变吗?
如上所述,它用于生成包。根据{{3}}仅html,js,xml或txt是有效的扩展名。
.hello - &gt;这是引用文件的标题: hello.scala.html?
在这种情况下, hello 是从视图生成的对象的名称。
.render - &gt;所有模板都使用此方法吗?
从视图源文件生成的每个对象都扩展 play.twirl.api.Template1 ,其中放置了 render()的声明。
(姓名) - &gt;我假设这是参考中的参数 hello.scala.html的第一行
是的,你是对的。
此外,您写过关于熟悉Java的文章。显然,掌握模板引擎的所有细节也需要一些关于Scala的知识。好消息是你不必了解它的一切就可以正常使用它。