jsp 页面
<s:iterator id="pointDTO" value="pointList" status="count">
        <s:hidden name="pointList[%{count.index}].pointCode">
        <s:hidden name="pointList[%{count.index}].pointName">
        <s:iterator id="dataSourceDTO" value="#pointDTO.dataSourceList" status="c">
           <s:hidden name="pointList[%{count.index}].dataSourceList[%{c.index}].pointName">
        </s:iterator></s:iterator>pointDTO dataSourceDTO 分别为两个dto
在pointDTO中有一个属性是List<DataSourceDTO> dataSourceList; 有get和set方法我再struts2的后台可以直接得到List<PointDTO>  pointList这个参数  PointDTO有String pointCode,String pointName
和List<DataSourceDTO> dataSourceList 值  并且dataSourceList中还有dataSourceDTO的相关属性问题是:我再对pointDTO 和dataSOurceDTO分别都重写了 equals和hasCode的方法后,在action中的pointList中我只能得到
PointDTO的pointCode,pointName属性,而dataSourceList为空哪位高手知道为什么  怎么解决?
struts2  jsp往action中传递List的原理是什么?怀疑 是struts将form中参数都放在map中 构造成List  hashCode产生冲突

解决方案 »

  1.   

    这个问题很有深度,支持你的怀疑。
    建议调整一下hashCode方法,测试一下
      

  2.   

    在Action 提交后,每个action会实例一个ActionContext对象。ActionContext是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放的是Action在执行时需要用到的对象 要获取rerquest可以以如下方式获取 Map request = (Map) ActionContext.getContext().get("request");
    表达在提交list pojo必须有一个属性定义的是list类才接受传过来的值 表单提交的所有数据都会通过转换器转换成String类型提交到后台,后台接收到的数据都是String 包括list中放的也是String类型
      

  3.   

    你说的是struts1的?是struts2吗  ?  struts2是用valueStack吧