Play Framework 2.5 - 在控制器中生成html代码时使用“@”(html.apply)

时间:2017-03-06 11:22:00

标签: java html scala playframework twirl

在控制器中,我们创建了一个字符串,在呈现页面时,该字符串将被解释为Html。每当字符串包含以“@”开头的scala / twirl代码时,就会导致页面无法正确呈现它。

控制器:

// render method
return ok(Html.apply(testButton()), testForm);

public String testButton() throws SQLException {
    result = "<input type='radio' id='@TestForm(\"TestID\").id'   
    name='@TestForm(\"TestID\").name'  value='5'  >" + "Test"; 
    return result;
}

Scala.html:

@(buttons: Html)(TestForm: Form[TestForm])

@buttons

应该如何看待:

<input type='radio' id='TestID' name='TestID'  value=5  >test

外观如何:

<input type='radio' id='@TestForm("TestID").id' name='@TestForm("TestID").name'  value='5'  >test

我们还用其他例子对此进行了测试。问题实际上似乎是@。也许解析器解析一次网站,用我们的代码替换@button,但不解析它。我们还尝试使用不同的方法(@@@,无\@)转义@,但之后总是以纯文本结尾。

@置于另一个@内进行渲染的最简单方法是什么?

1 个答案:

答案 0 :(得分:3)

您无法在控制器中执行此操作。 b=1在编译时由Twirl编译器解析,但您尝试在运行时引入它。它永远不会奏效。即使你可以让它工作,也不是一个好主意。它通过使用表示代码混淆控制器代码来打破MVC范例。

这应该是另一个类似于:

的Twirl视图
@