У меня есть файл 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
не отображается. Что не так в макете? Может быть, я устал, но я просто не понимаю. Спасибо, что тратили свое время.
Иногда может возникнуть странность с движком шаблона, пытающимся избежать строковых данных, и я столкнулся с этим при попытке написать целые атрибуты с помощью переменных шаблона, а не шаблонов их значений. Вы можете обойти это, обернув "selected"
в конструкторе Html
чтобы заставить Twirl обрабатывать его буквально. Так:
<option @if(value == ac.role){Html("selected")} value="@value"> @text </option>
Вы также должны открыть проблему в проекте Twirl, потому что я лично думаю, что вы должны работать так, как есть.
Ой! Я нашел ошибку! По двум причинам, я думаю:
==
вместо string.contentEquals(otherString)
Рабочий код
<select name="role" id="role">
@for((value, text) <- ac.getRoles()) {
<option @if(value.contentEquals(ac.role + "")){selected} value="@value"> @text </option>
}
</select>