Как установить значение по дефолту в select из списка Thymeleaf?

Выношу в 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, если быть точным, но в этом месте я перевожу в лист), поэтому мне приходится проходиться по двум спискам и искать какое значение у них одинаковое, чтобы установить его в значение по дефолту (th:selected). Для того, чтобы выводилась его роль из листа при входе на форму Thymeleaf я использую th:block, так как не могу обратиться к элементу из authorities. То есть в одном случае из-за th:field="*{authorities}" не подгружается форма (почему?), а с другой стороны, если это убрать, то нет смысла в этой форме. Подскажите, как решить эту проблему?


Ответы (0 шт):