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

Я создал форму и действие в 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(), что мне и нужно. Есть идеи, где я ошибаюсь?


person 3urdoch    schedule 10.11.2010    source источник


Ответы (2)


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

person Tarski    schedule 11.11.2010
comment
Это не решает мою проблему, потому что я хочу, чтобы listKey и listValue были разными. - person 3urdoch; 11.11.2010
comment
Мой ответ позволяет вам использовать разные значения для listkey и listvalue. Однако getRoles() и setRoles() должны быть того же типа, что и ваш список. - person Tarski; 12.11.2010

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

person 3urdoch    schedule 11.11.2010