Как установить выбранную опцию в шаблоне Play2 scala?

1

У меня есть файл 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 не отображается. Что не так в макете? Может быть, я устал, но я просто не понимаю. Спасибо, что тратили свое время.

Теги:
playframework-2.0
twirl

2 ответа

1

Иногда может возникнуть странность с движком шаблона, пытающимся избежать строковых данных, и я столкнулся с этим при попытке написать целые атрибуты с помощью переменных шаблона, а не шаблонов их значений. Вы можете обойти это, обернув "selected" в конструкторе Html чтобы заставить Twirl обрабатывать его буквально. Так:

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

Вы также должны открыть проблему в проекте Twirl, потому что я лично думаю, что вы должны работать так, как есть.

0

Ой! Я нашел ошибку! По двум причинам, я думаю:

  1. Различные типы данных (String и integer)
  2. Использование == вместо 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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню