我按照以下链接:我的问题也类似,但无法排除故障。 Struts2: Updating the values of a "List Of Objects" inside a Map
我有Integer
和ObjA
的地图,这是一个仅包含List<ObjB>
的自定义对象。
private Map<Integer, ObjA> displayMap = new HashMap<Integer, ObjA>();
ObjB
包含大小,状态等参数。
JAVA代码我使用所有对象值填充displayMap
并将其显示在jsp上。但是当我再次提交表单时,displayMap
变为空。
public String displayColumn() throws Exception {
for (int i = 0; i < numberOfDoors.length; i++) {
int k = 1;
List<ObjB> objBList = new ArrayList<ObjB>();
while (k <= numberOfDoors[i]) {
ObjB objB =new ObjB();
objB.setSizeCd("1");
objBList.add(objB);
doorNoCounter = doorNoCounter + 1;
k++;
}
ObjA objA = new ObjA();
objA.setObjBList(objBList);
displayMap.put(i+1, objA);
}
return SUCCESS;
}
}
private class ObjA{
private List<ObjB> objBList;
public List<ObjB> getObjBList() {
return objBList;
}
public void setObjBList(List<ObjB> objBList) {
this.objBList= objBList;
}
}
private class objB{
protected String sizeCd;
public String getSizeCd() {
return sizeCd;
}
public void setSizeCd(String sizeCd) {
this.sizeCd = sizeCd;
}
}
JSP代码段:
<table class="tableStyle">
<tr>
<s:iterator status="outerStat" value="displayMap" var="parentMap">
<tr>
<s:iterator status="innerStat" value="%{#parentMap.value.objBList}" var="listLocker">
<td class="labelStaticText">Select Size Code:</td>
<td >
<s:textfield name="displayMap['%{#parentMap.key}'].objBList[%{#innerStat.index}].sizeCd" value="%{sizeCd}"/>
</td>
</s:iterator>
</tr>
</s:iterator>
</tr>
答案 0 :(得分:0)
您的值正确显示的事实毫无意义,因为即使value
属性正确,name
属性也会用于发送项目,而且它们是无关的。
请为ObjA
和ObjB
使用公开课,它会起作用。
编辑:
唯一的问题是当我提交表单时我没有在Map中获取值,因此没有附加struts xml映射..
由于您没有附加struts映射,我无法看到您的拦截器堆栈是否为此操作配置得很好。然后自己动手,确保你有默认拦截器堆栈,或者至少ParametersInterceptor
存在。请记住,如果添加自己的拦截器,则需要添加堆栈,否则您将使用单个拦截器而不是将其添加到其他拦截器。