如何在play(2.3)框架内的Java控制器代码中从String变量构造Html对象

JVM*_*ATL 8 java playframework playframework-2.3

刚刚开始使用play框架,我正在尝试理解java应用程序代码和基于scala的模板框架之间的交互(注意:到目前为止我对Scala一无所知,除了它是另一个编译为JVM上的字节码的语言,以及您的Scala和Java类可以交互的语言.

我有一个test1.scala.html模板,如下所示:

@(title: String)(content: Html)

<!DOCTYPE html>

<html>
    <head>
        <title>@title</title>
    </head>
    <body>
        @content
    </body> </html>
Run Code Online (Sandbox Code Playgroud)

从顶行可以看出,模板需要一个String和一个Html参数,但我无法弄清楚如何从Java调用者代码构造Html参数!

我在我的控制器类中尝试了一些变体:

return ok(test1.render("My Title","It <em>finally</em> works!"));
Run Code Online (Sandbox Code Playgroud)

显然这很失败,因为第二个参数是String而不是Html,所以我的参数不匹配.(有一个运行时错误: actual argument String cannot be converted to Html by method invocation conversion- 这是有道理的,但我希望这里有一些魔法.:))

所以我尝试从String中创建一些Html,认为这可能是包中的某个帮助类,这可能"只是工作":

return ok(test1.render("My Title",new Html("It <em>finally</em> works!")));
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为javac找不到Html类.好,可以.扫描播放文档,似乎有一个play.api.templates.Html类(用Scala编写)带有一个带String的构造函数,所以我尝试完整的包限定名:

return ok(test1.render("My Title",new play.api.templates.Html("It <em>finally</em> works!")));
Run Code Online (Sandbox Code Playgroud)

这也不会编译:我在包play.api.templates中找不到'Html'的符号.

那么:什么是让我将我的String(其中包含HTML片段)转换为我可以传递到模板的HTML对象的神奇酱油?

Mic*_*jac 8

播放模板已经被分解到Twirl模块中,如Play 2.3迁移指南中所述.

play.api.templates.Html现在play.twirl.api.Html.

  • import play.twirl.api.Html.它现在是Html.apply(<string>).<sarcasm>或者您可以等待下一个次要版本再次更改.</讽刺> (3认同)