Выношу в select значения из списка ролей. К каждому пользователю привязан список ролей.
Контроллер:
@GetMapping("/edit/{id}")
public String editUser(@PathVariable("id") Long id, Model model) {
model.addAttribute("organizations", organizationService.getOrganisations());
model.addAttribute("authority", userService.getAuthorities());
model.addAttribute("user_composite", userService.getUserComposite(id));
return "/users/edit";
}
Вывод в select реализовал следующим образом:
<th:block th:each="auth : ${user_composite.authorities}">
<select class="form-control" id="authority" th:field="*{authorities}">
<option th:each="authselect : ${authority}"
th:value="${authselect.authority}"
th:text="${authselect.authority}"
th:selected="${authselect == auth}">
</option>
</select>
</th:block>
Роли у пользователя:
private Set<Role> authorities = Collections.emptySet();
Сложность заключается в том, что происходит ошибка, как только в теге select появляется th:field="*{authorities}".
Ошибка: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Error during execution of processor 'org.thymeleaf.spring5.processor.SpringOptionFieldTagProcessor' (template: "/users/edit" - line 64, col 27)] with root cause
java.lang.NumberFormatException: For input string: "ADMIN"
Но если Field убирается, то все выводится, однако, естественно, что в таком случае поле остается пустым.
Итак, в select выводится список ролей пользователя. У пользователя его роли (authorities) тоже является списком (вообще set, если быть точным, но в этом месте я перевожу в лист). Для того, чтобы выводилась его роль из листа при входе на форму Thymeleaf я использую th:block, так как не могу обратиться к элементу из authorities. То есть в одном случае из-за th:field="*{authorities}" не подгружается форма (почему?), а с другой стороны, если это убрать, то нет смысла в этой форме. Подскажите, как решить эту проблему?