2010-11-10 124 views
0

我在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()方法返回我的角色类不是特定的getId()和getName()方法,这是我想要的。任何想法,我错了?

回答

0

阅读了struts2源代码后,似乎我的回答很明显。我需要在我的Role类上实现.equals()方法才能工作。

0

我认为你的问题可能是getRoles()setRoles()需要是List<String>而不是List<Roles>。这是因为HTML select使用字符串作为密钥。将类型更改为List<String>,并使用用户当前选项的角色标识初始化角色变量。这是因为你有listkey=id。你也需要multiple=true

+0

这并不能解决我的问题,因为我希望listKey和listValue不同。 – 3urdoch 2010-11-11 16:07:25

+0

我的答案允许您为listkey和listvalue使用不同的值。但是getRoles()和setRoles()需要与你的listkey类型相同。 – Tarski 2010-11-12 11:02:09