更新Map中自定义对象的值说对象A,其中包含对象B的列表

时间:2014-05-05 22:14:01

标签: java struts2

我按照以下链接:我的问题也类似,但无法排除故障。 Struts2: Updating the values of a "List Of Objects" inside a Map

我有IntegerObjA的地图,这是一个仅包含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>

1 个答案:

答案 0 :(得分:0)

您的值正确显示的事实毫无意义,因为即使value属性正确,name属性也会用于发送项目,而且它们是无关的。

现在BTW(编辑之后)很清楚问题是什么:你正在使用两个私有内部类。

请为ObjAObjB使用公开课,它会起作用。

编辑:

  

唯一的问题是当我提交表单时我没有在Map中获取值,因此没有附加struts xml映射..

由于您没有附加struts映射,我无法看到您的拦截器堆栈是否为此操作配置得很好。然后自己动手,确保你有默认拦截器堆栈,或者至少ParametersInterceptor存在。请记住,如果添加自己的拦截器,则需要添加堆栈,否则您将使用单个拦截器而不是将其添加到其他拦截器。