预先从列表中选择选项

时间:2014-06-22 19:05:24

标签: java spring-mvc jquery-plugins jstl

我目前正在教自己一些编码和构建一个小型Web应用程序,以便用户可以拥有角色。 它基于Spring MVC。 用户可以编辑。 我想要做的是,当用户个人资料出现时,它会列出用户的角色,他已选择的角色已被选中,所有可用的角色都未被选中。

我还使用jquery multiselect.js插件来查看所选和未选中项目的分离效果。

我目前在控制器中的requestmethod中添加了两个属性:

allroles和userroles

我认为使用一些JSTL标签可以使选择列表生成:

<c:forEach items="${allroles}" var="role">
<c:forEach items="${userroles}" var="userrole">
<form:option value="${role.id}" selected="${role.name == userrole.name ? 'selected' : ''}">${role.name}</form:option>
</c:forEach></c:forEach>

嗯,如果用户只有一个当前角色,这可以正常工作。 但是一旦他有2个或更多,选项将在列表中出现加倍或三倍[...],这会打破选择。 这是有意义的,因为它是两个嵌套的foreach循环,但我只是希望它遍历allroles并检查哪些角色等同于userroles上的角色,如果是这样,则将它们标记为已选中。

我此刻有点卡住了,有人可以告诉我,是否可以用JSTL和/或正确或更好的方式做到这一点?

感谢。

1 个答案:

答案 0 :(得分:0)

假设您已覆盖角色类的equals方法并且您使用的是EL 2.2+,则可以将此标记简化为:

<c:forEach items="${ allroles }" var="role">
    <form:option value="${ role.id }" selected="${ userroles.contains(role) ? 'selected' : ''}">
        ${role.name}
    </form:option>
</c:forEach>

这可以解决您的重复问题。