Выбранный тег исчезает после проверки формы и отправки в JSP

Я новичок в Spring и пытаюсь исправить небольшую проблему в своем приложении. У меня есть форма для редактирования профиля пользователя. В этой форме у меня есть один раскрывающийся список, в котором пользователь-администратор может выбрать роль пользователя для редактируемого пользователя. Когда я собираюсь редактировать страницу пользователя, все данные в форме заполняются из базы данных. Допустим, у меня есть два входа в форме: input с Фамилия и select с роль пользователя. Элемент select содержит все роли, которые существуют в базе данных, но выбранная роль сопоставляется с ролью, которую на самом деле назначил пользователь.

Это часть моей формы - введите фамилию

<spring:bind path = "lastName">
    <div class = "form-group">
        <label for = "lastName">Last name</label>
        <form:input path = "lastName" type = "text" class = "form-control ${status.error ? 'border border-danger' : ''}" id = "lastName" />
        <form:errors path = "lastName" cssStyle = "color: #ff0000;"/>
    </div>
</spring:bind>

и это элемент выбора:


<form:select path = "roles" id = "role" multiple = "false">
    <form:options items = "${allRoles}" itemValue = "id" itemLabel = "role"/>
</form:select>

Теперь, когда я хочу отредактировать фамилию, например. оставьте пустое поле, тогда Spring проверит это поле и выдаст ошибку. Проблема в том, что роль, которая ранее была выбрана в элементе select, теперь не выбрана.

Это HTML-код страницы перед проверкой:

Вход:

<div class = "form-group  ">
        <label for = "email" class = "active">Email</label>
        <input id = "email" name = "email" type = "email" class = "form-control" value = "[email protected]">
</div>

Выбрать:

<select id = "role" name = "roles"">
<option value = "1">ADMIN</option>
<option value = "2">USER</option>
<option value = "3">STUDENT</option>
<option value = "4" selected = "selected">LECTURER</option>
</select>

и после очистки поля lastName и отправки формы: Вход:

<div class = "form-group">
        <label for = "lastName" class = "">Last name</label>
        <input id = "lastName" name = "lastName" type = "text" class = "form-control border border-danger" value = "">
        <span id = "lastName.errors" style = "color: #ff0000;">This field is required.</span>
</div>

Выбрать:

<div class = "form-group">
<label for = "role">Role Id</label>
<select id = "role" name = "roles">
<option value = "1">ADMIN</option>
<option value = "2">USER</option>
<option value = "3">STUDENT</option>
<option value = "4">LECTURER</option>
</select>
</div>

Как видите, атрибут selected= "selected" исчез из варианта 4. Как этого избежать? Кстати. Я знаю об этом Выбранное значение Spring MVC в форме: выбрано после ошибки проверки формы

но кажется, что это не работает в моем случае.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
146
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел совет на заархивированной странице здесь

Теперь выбранный атрибут не удаляется из тега опции. Я не уверен, что это хороший способ решить эту проблему, но это работает для меня.

Измененный выбор:

<form:form method = "post" modelAttribute = "editForm">
        <c:forEach items = "${editForm.roles}" var = "role">
            <c:set var = "userRoleId" value = "${role.id}" scope = "request"/>
        </c:forEach>

        <form:select path = "roles" id = "role" multiple = "false">
            <c:forEach var = "tempRole" items = "${allRoles}">
                <option value = "${tempRole.id}" <c:if test = "${tempRole.id == userRoleId}">selected = "selected"</c:if> value = "${tempRole.id}">${tempRole.role}</option>
            </c:forEach>
        </form:select>
</form:form>

Другие вопросы по теме