在Play框架中引用模板语法系统

时间:2014-11-02 20:34:25

标签: playframework-2.0

我正在使用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

  • 第一行中的参数

1 个答案:

答案 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的知识。好消息是你不必了解它的一切就可以正常使用它。