Задать вопрос
@Nulltiton

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

Войдите, чтобы написать ответ

Похожие вопросы