1

在控制器中,我们正在创建一个字符串,在呈现页面时将其解释为 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;
}

斯卡拉.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我们的代码,但不会在之后解析。我们还尝试@使用不同的方法(@@, \@, no @)转义,但之后总是以纯文本结尾。

让另一个@内部@渲染的最简单方法是什么?

4

1 回答 1

3

您不能从控制器中执行此操作。@由 Twirl 编译器在编译时解析,但您试图在运行时引入它。它永远不会起作用。即使你可以让它工作,这也不是一个好主意。它通过混淆控制器代码和表示代码来打破 MVC 范式。

这应该是另一个 Twirl 视图,看起来像:

// I don't know what TestForm is, so this is a guess
// that it exists in the controller and needs to be passed in
@(TestForm: Form) 

<input
  type='radio'
  id='@TestForm("TestID").id'   
  name='@TestForm("TestID").name'  value='5'  
>
于 2017-03-06T16:02:07.100 回答