我正在使用Spring MVC和jQuery在JSP中处理控制器发送的对象。
我的控制器使用以下方法向JSP发送多个对象:
modelAndView.addObject("roleForm" + rol.getRolecode(), form);
表单是以下类的对象:
public class RoleForm
{
private String roleCode;
private LinkedHashSet<String> listEnabled;
... getters and setters ...
}
所以,我发送的对象有关键roleFormADMIN,roleFormUSER等。这些对象的数量和名称是未知的,因为它们是从数据库中检索的。
在我的JSP中,我为每个rol访问其对应的RoleForm:
<c:forEach items="${rolesList}" var="role">
<div class="role" id="${role}">
<label class="adminSectionTitle">
${role}
</label>
<form:form method="post" id="roleForm${role}" modelAttribute="roleForm${role}" action="roles.html">
<fieldset>
<form:hidden path="roleCode"/>
<div class="pickList">
<fieldset class="pickItems">
<legend >Enabled</legend>
<form:select path="listFunctEnabled" id="combo1" size="5" multiple="true">
<form:options items="${listFunctEnabled}" />
</form:select>
</fieldset>
</div>
</fieldset>
<div class="formButtons">
<input type="submit" value="<fmt:message key="button.save"/>" />
<input type="button" name="reset" onclick="location.href='<c:url value="roles.html"/>'" value="<fmt:message key="button.clear"/>" />
</div>
</form:form>
</div>
</c:forEach>
正确检索每个RoleForm的属性roleCode,但它无法访问表单的属性listFunctEnabled(它为空)。
如果我直接写表单的名称(例如,roleFormADMIN.listFunctEnabled),那么它会以下列形式写入列表中的每个项目:选项。
如果我使用roleForm $ {role} .listFunctEnabled,那么它会将其视为一个String,并说String没有任何名为listFunctEnabled的属性。
我需要为每个角色添加一个表单,因为每个角色需要一个按钮才能更新其functenabled列表。
我怎么能实现这个目标?
答案 0 :(得分:0)
您是否尝试将modelAttribute
值设置为另一个变量,然后访问listFunctEnabled
列表?这就是我的想法。
<c:set var="roleFormName" value="roleForm${role}"/>
然后在select标签
中使用它<form:select path="listFunctEnabled" id="combo1" size="5" multiple="true">
<form:options items="${roleFormName.listFunctEnabled}" />
</form:select>
答案 1 :(得分:0)
我终于解决了使用HashMap而不是一个集合的问题。所以,在我的控制器中,我为每个角色(hashmap的键)填充listFunctEnabled列表的地图 例如:map [ROLE_ADMIN] = {Funct1,Funct2,Funct3}
RoleForm保持不变,因此所选项目存储在listFunctEnabled属性中。
现在,在JSP中,我使用以下内容访问它:
<form:form method="post" id="roleForm${role}" modelAttribute="roleForm${role}" action="roles.html">
<fieldset>
<form:hidden path="roleCode"/>
<div class="pickList">
<fieldset class="pickItems">
<legend >Enabled</legend>
<form:select path="listFunctEnabled" id="combo1" size="5" multiple="true">
<form:options items="${map[role]}" />
</form:select>
</fieldset>
</div>
</fieldset>
</form:form>
该解决方案没有任何问题。我希望对其他人有用。