如何在Play2 scala模板中设置所选选项?

时间:2014-08-07 12:47:00

标签: java scala playframework-2.0 twirl

我的文件form.scala.html看起来像

@(ac: models.entities.Account)
. . .
<form id="accountForm" action="@routes.Accounts.save(ac.getId())" method="POST">
<table>
    <tbody>
    . . .
    <tr>
    <td>Role</td>
    <td>
    <select name="role" id="role">
        @for((value, text) <- models.entities.Account.getRoles()) {
        <option @if(value == ac.role){"selected"} value="@value"> @text </option>
        }
    </select>
    </td>
    </tr>
    . . .
    </tbody>
</table>
<p align="center">
    <input type="submit" value="Save">
    <a class="button" href="@routes.Accounts.index()">Cancel</a>
</p>
</form>

我希望输出HTML

. . .
<td>Role</td>
<td>
    <select name="role" id="role">
        <option  value="1"> Admin </option>
        <option selected value="2"> User </option>
    </select>
</td>
. . .

selected不会出现。布局有什么问题?也许我累了,但我无法理解。 谢谢你浪费时间。

2 个答案:

答案 0 :(得分:1)

模板引擎尝试转义字符串数据时有时会出现奇怪现象,而且在尝试使用模板变量编写整个属性时,我会遇到这种情况,而不是模板化它们的值。你应该能够通过在"selected"构造函数中包装Html来解决这个问题,以使Twirl按字面意思对待它。所以:

<option @if(value == ac.role){Html("selected")} value="@value"> @text </option>

你也应该在Twirl项目中打开一个问题,因为我个人会认为你的方式应该按原样运作。

答案 1 :(得分:0)

哦!我发现错了!我认为这有两个原因:

  1. 不同的数据类型(字符串和整数)
  2. 使用==代替     string.contentEquals(otherString)
  3. 工作代码是

    <select name="role" id="role">
    @for((value, text) <- ac.getRoles()) {
      <option @if(value.contentEquals(ac.role + "")){selected} value="@value"> @text </option>
    }  
    </select>