Java Spring窗体从对象中选择枚举
我正在制作一个表单来编辑用户,每个用户都有多个基于SpringSecurity的角色。问题是选择选项没有预先选择用户的对应角色 使用者 形式Java Spring窗体从对象中选择枚举,java,spring,jsp,spring-mvc,spring-form,Java,Spring,Jsp,Spring Mvc,Spring Form,我正在制作一个表单来编辑用户,每个用户都有多个基于SpringSecurity的角色。问题是选择选项没有预先选择用户的对应角色 使用者 形式 在您的角色enum中有以下代码 public enum Role { private static Map<Integer, String> idNameMap = new HashMap<Integer, String>(); static { for(Role role:Role.values(
在您的角色enum中有以下代码
public enum Role {
private static Map<Integer, String> idNameMap = new HashMap<Integer, String>();
static {
for(Role role:Role.values()) {
idNameMap.put(role.ordinal(), role.name());
}
}
public static Map<Integer, String> getIdNameMap() {
return idNameMap;
}
}
做
这应该可以很好地解决您的问题。我有这个解决方案,但我一直在寻找spring自动执行的一些操作
...
<form:select multiple="true" path="userRoles" itemValue="role">
<c:forEach items="${roles}" var="role">
<c:set var="selected" value="false" />
<c:forEach items="${newUser.userRoles}" var="userRole">
<c:if test="${fn:containsIgnoreCase(userRole, role)}">
<form:option value="${role}" selected="true"/>
<c:set var="selected" value="true" />
</c:if>
</c:forEach>
<c:if test="${selected eq false}">
<form:option value="${role}"/>
</c:if>
</c:forEach>
</form:select>
...
你是如何在控制器中设置角色参数的,你能分享吗?编辑@SemihEker。通过此解决方案,从数据库提交的数据是正确的,可以将值更改为索引,但不会太多
<form:fomr commandName="user">
<form:input path="username" />
...
<form:select multiple="true" path="userRoles" itemValue="role">
<form:options items="${roles}"/>
</form:select>
...
</form:form>
User user = getUserById(id);
model.addAttribute("newUser", user);
@Transactional
public User getUserById(int id) {
Session session = sessionFactory.getCurrentSession();
User user = (User) session.get(User.class, id);
if (user != null) {
user.getUserRoles().size();
}
return user;
}
public enum Role {
private static Map<Integer, String> idNameMap = new HashMap<Integer, String>();
static {
for(Role role:Role.values()) {
idNameMap.put(role.ordinal(), role.name());
}
}
public static Map<Integer, String> getIdNameMap() {
return idNameMap;
}
}
items=${roles} == Roles.values()
items=${roles} == Roles.getIdNameMap()
...
<form:select multiple="true" path="userRoles" itemValue="role">
<c:forEach items="${roles}" var="role">
<c:set var="selected" value="false" />
<c:forEach items="${newUser.userRoles}" var="userRole">
<c:if test="${fn:containsIgnoreCase(userRole, role)}">
<form:option value="${role}" selected="true"/>
<c:set var="selected" value="true" />
</c:if>
</c:forEach>
<c:if test="${selected eq false}">
<form:option value="${role}"/>
</c:if>
</c:forEach>
</form:select>
...