JSP form:select. Как работать со коллекциями объекта?

167
14 июля 2018, 03:10

Контроллер:

@GetMapping("/access")
    public ModelAndView accessView() {
        ...
        modelAndView.addObject("newUser", new User());

User.class:

@ManyToMany(...)
private Set<Role> roles = new HashSet<>();
public User() {
    this.id = 1L;
    this.username = "1212121";
    Role role1 = new Role(); role1.setId(1L); role1.setNameRole("QWERTY");
    Role role2 = new Role(); role2.setId(2L); role2.setNameRole("ASDFGH");
    Role role3 = new Role(); role3.setId(3L); role3.setNameRole("ZXCVBN");
    this.roles.add(role1);
    this.roles.add(role2);
    this.roles.add(role3);
};

Страница jsp:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
    <form:form method='POST' ... modelAttribute="newUser">
...
        <form:select path="roles" multiple="true" id="userRoles_" class="form-control">
            <form:options items="${roles}" itemLabel="nameRole" itemValue="id"/>
        </form:select>

Передаю объект User, как из него на странице заполнить из коллекции ролей пользователя form:select?

Answer 1

По-моему, Вы немного неверно описали form:options. В данном случае выпадающий список не знает откуда именно он должен быть roles, однако указав значение items как ${newUser.roles}, Вы укажете откуда брать значения. Иными словами должно быть что-то типа:

<form:options items="${newUser.roles}" itemLabel="nameRole" itemValue="id" />

Однако у меня в целом странное ощущение от того, что заполнение списка ролей происходит, используя доменную модель user'а. Возможно имеет смысл использовать такую вещь как @ModelAttribute и держать модель отдельно от данных. Например, так:

 @ModelAttribute("rolesList")
 public Set<Role> getRolesList() {
   Role role1 = new Role();
   role1.setId(1L);
   ...
   Set<Role> roles = new HashSet<Role>();
   roles.add(role1);
   roles.add(role2);
   roles.add(role3);
   return roles;
 }

Тогда наполнение выпадающего списка на GET можно будет сделать так:

А User будет использоваться в форме для дальнейшего, скажем, сохранения.

Надеюсь это ответит на Ваш вопрос... так или иначе.

READ ALSO
Что означает оператор стрелка -&gt; в Kotlin? Эквивалент в Java

Что означает оператор стрелка -> в Kotlin? Эквивалент в Java

Всем привет! Подскажите плиз! Пытаюсь разобрать один паттерн, пример использования Android Architecture Components, написанный на Koltin'e и столкнулся с синтаксисом,...

192
Не читает русский язык

Не читает русский язык

Работаю с файлами, мой код:

295
БД ФИАС импорт xml в Postgres

БД ФИАС импорт xml в Postgres

Доброго времени суток

572