Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Поле множественного выбора Struts2 с предварительным выбором текущих параметров

Автор вопроса: 3urdochОтветов: 2

Я создал форму и действие в struts2 для редактирования записи пользователя, у пользователя может быть одна или несколько ролей, и у меня есть форма, в которой поле множественного выбора используется для выбора ролей для данного пользователя. Содержимое поля выбора считывается из базы данных, и я хочу, чтобы поле выбора предварительно выбирало текущие параметры пользователей при загрузке формы, используя примеры, найденные в Интернете. У меня есть следующее.

В моем классе действий

public List<Role> getRoles()
{
    return roles;
}


public void setRoles( List<Role> roles )
{
    this.roles = roles;
}


public List<Role> getAvailableRoles()
{
    return availableRoles;
}

В моем JSP

<s:select list="availableRoles" listKey="id" listValue="name" name="roles" label="Roles" multiple="true" />

Поле множественного выбора создано нормально, однако для начала не выбрано ни одного элемента, и я немного сбит с толку, поскольку каждый найденный мной пример делает именно это.

Я попытался изменить поле выбора только на это:

<s:select list="availableRoles" name="roles" label="Roles" multiple="true" />

Этот способ успешно предварительно выбирает параметры, однако затем раскрывающийся список заполняется тем, что возвращается из метода toString() в моем классе Role, а не конкретно методами getId() и getName(), что мне и нужно. Есть идеи, где я ошибаюсь?

javastruts2

Ответы

Ответ 1 · Tarski

Я думаю, ваша проблема может заключаться в том, что getRoles() и setRoles() должны быть List<String>, а не List<Roles>. Это связано с тем, что HTML select использует строки для своих ключей. Измените тип на List<String> и инициализируйте переменную roles с идентификаторами ролей для текущих опций пользователя. Это потому, что у вас есть listkey=id. Вам также понадобится multiple=true.

Ответ 2 · 3urdoch

После прочтения исходного кода struts2 мой ответ кажется довольно очевидным. Мне нужно реализовать метод .equals() в моем классе Role, чтобы это работало.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы