我在spring mvc 2中有一个表单。 我的命令类包含一个我需要绑定的复杂映射。
Map<String, Map<String, Class3>> class2Map;
在JSP中,我可以迭代Class3的命令类和<c:out>
映射值,即nameToGet&amp; anyElement3。
但是当我尝试用表格
我正在使用
<c:forEach items="${class1.class2List}" var="item" varStatus="itemRow">
<c:forEach var="map" items="${item.class2Map}" varStatus="mapRow">
<c:forEach var="innerMap" items="${map.value}" varStatus="innerMapRow">
用于迭代。我像
一样具有约束力<form:input path="class2List[${itemsRow.index}].class2Map[${mapRow.index}].value[0].anyElement3" />
它抛出异常,如
org.springframework.beans.NotReadablePropertyException: Invalid property 'class1[0].class2Map[0].value[0].anyElement3' of bean class [Class1]: Bean property 'class1[0].class2Map[0].value[0].anyElement3' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
我的课程看起来像
Class1 (Command Class)
List<Class2> class2List;
String anyElement1;
Class2
Map<String, Map<String, Class3>> class2Map;
String anyElement2;
Class3
Map<String, Class3> class3Map;
String nameToGet;
String anyElement3;
我成功绑定了命令类的其他数据成员。如何将此地图绑定到Spring Form?
答案 0 :(得分:0)
确保class1具有每个字段的getter和setter。
public Class1{
String nameToGet;
String anyElement3;
public String getNameToGet(){
return nameToGet;
}
public void setNameToGet(String nameToGet){
this.nameToGet = nameToGet;
}
public String getAnyElement3(){
return anyElement3;
}
public void setAnyElement3(String anyElement3){
this.anyElement3 = anyElement3;
}
}
还应该有类似的getter和setter:
Map<String, Map<String, Class1>> mapName;
答案 1 :(得分:0)
在表单支持对象中,创建要绑定的对象。
public class Class1Form{
private String element3;
//Other properties needed in your form.
public String getElement3(){
return element3;
}
public setElement3(String element){
element3 = element;
}
//Other getters and setters.
}
答案 2 :(得分:0)
使用here提到的想法,您可以试试这个:
class1[${itemRow.index}].class2Map['${mapRow.current.key}'].anyElement3
我们的想法是在mapRow
的循环中,现在它正在迭代Map,因此每个Map.Entry
都应该可用。