Я новичок в 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 в форме: выбрано после ошибки проверки формы
но кажется, что это не работает в моем случае.




Я нашел совет на заархивированной странице здесь
Теперь выбранный атрибут не удаляется из тега опции. Я не уверен, что это хороший способ решить эту проблему, но это работает для меня.
Измененный выбор:
<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>