Java Struts2多选框预选当前选项

Java Struts2多选框预选当前选项,java,struts2,Java,Struts2,我已经在struts2中创建了一个表单和操作,用于编辑用户记录,一个用户可能有一个或多个角色,我有一个表单,其中多个选择框用于选择给定用户的角色。选择框的内容是从数据库中读取的,我希望选择框在加载表单时预先选择用户的当前选项,使用联机示例我有以下内容 在我的动作课上 public List<Role> getRoles() { return roles; } public void setRoles( List<Role> roles ) { this

我已经在struts2中创建了一个表单和操作,用于编辑用户记录,一个用户可能有一个或多个角色,我有一个表单,其中多个选择框用于选择给定用户的角色。选择框的内容是从数据库中读取的,我希望选择框在加载表单时预先选择用户的当前选项,使用联机示例我有以下内容

在我的动作课上

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


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


public List<Role> getAvailableRoles()
{
    return availableRoles;
}
public List getRoles()
{
返回角色;
}
public void setRoles(列出角色)
{
this.roles=角色;
}
公共列表getAvailableRoles()
{
返回可用资源;
}
在我的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()方法返回的内容,而不是我想要的getId()和getName()方法。你知道我哪里出错了吗?

我想你的问题可能是
getRoles()
setRoles()
需要是
列表
而不是
列表
。这是因为HTML
select
对其键使用字符串。将类型更改为
List
,并使用用户当前选项的角色Id初始化角色变量。这是因为您有
listkey=id
。您还需要
multiple=true

阅读struts2源代码后,我的答案似乎相当明显。我需要在我的角色类上实现.equals()方法,这样才能工作。

这并不能解决我的问题,因为我希望listKey和listValue不同。我的答案允许您对listKey和listValue使用不同的值。但是,getRoles()和setRoles()的类型必须与listkey的类型相同。