struts1.x包含嵌套List的多行提交
普通的多行提交没任何问题,可现在这个业务比较特殊
一般的多行提交,从一个list中迭代出来,然后再提交回这个list就行了,
现在这个list中还有一个list,假设外面这个list是list1,里面这个list是list2,
在页面显示数据的时候都正常,提交时外面这个list1的数据能够正常提交,里面那个list2就只能提交一部分了
把jsp的一部分发上来吧,外面的叫result,里面的叫list,这两个list的get方法都重写过了
- HTML code
<logic:present name="bodyForm" property="result"> <logic:iterate id="result" name="bodyForm" property="result" indexId="idx"> GROUP CODE:<html:text name="result" property="groupCd" indexed="true" /> <div class="list" id="rsdiv"> <table id="rstbl"> <tr> <th>名称</th> <th>年</th> <th>金</th> </tr> <logic:iterate id="list" name="result" property="list"> <tr> <td> <html:text name="list" property="name" indexed="true" /><BR> </td> <td> <html:text name="list" property="old" indexed="true" /><BR> </td> <td> <html:text name="list" property="money" indexed="true" /><BR> </td> </tr> </logic:iterate> </table> </div> <html:text name="result" property="muiltMoney" indexed="true" /><BR><BR> </logic:iterate></logic:present>
也就是说第二个<logic:iterate>标签内的不能正常提交,看了一下生成的源码,也大概知道原因,但不清楚该怎么改,源码如下
- HTML code
GROUP CODE:<input type="text" name="result[0].groupCd" value="1"> <div class="list" id="rsdiv"> <table id="rstbl"> <tr> <th>名称</th> <th>年</th> <th>金</th> </tr> <tr> <td> <input type="text" name="list[0].name" value="name1"><BR> </td> <td> <input type="text" name="list[0].old" value="1"><BR> </td> <td> <input type="text" name="list[0].money" value="101"><BR> </td> </tr> <tr> <td> <input type="text" name="list[1].name" value="name7"><BR> </td> <td> <input type="text" name="list[1].old" value="7"><BR> </td> <td> <input type="text" name="list[1].money" value="107"><BR> </td> </tr> <tr> <td> <input type="text" name="list[2].name" value="name9"><BR> </td> <td> <input type="text" name="list[2].old" value="9"><BR> </td> <td> <input type="text" name="list[2].money" value="109"><BR> </td> </tr> </table> </div> <input type="text" name="result[0].muiltMoney" value="317"><BR><BR> GROUP CODE:<input type="text" name="result[1].groupCd" value="2"> <div class="list" id="rsdiv"> <table id="rstbl"> <tr> <th>名称</th> <th>年</th> <th>金</th> </tr> <tr> <td> <input type="text" name="list[0].name" value="name2"><BR> </td> <td> <input type="text" name="list[0].old" value="2"><BR> </td> <td> <input type="text" name="list[0].money" value="102"><BR> </td> </tr> <tr> <td> <input type="text" name="list[1].name" value="name8"><BR> </td> <td> <input type="text" name="list[1].old" value="8"><BR> </td> <td> <input type="text" name="list[1].money" value="108"><BR> </td> </tr> <tr> <td> <input type="text" name="list[2].name" value="name11"><BR> </td> <td> <input type="text" name="list[2].old" value="11"><BR> </td> <td> <input type="text" name="list[2].money" value="111"><BR> </td> </tr> </table> </div> <input type="text" name="result[1].muiltMoney" value="321"><BR><BR>...................
看源码就清楚了,问题就出在外面的result每迭代一次,里面的list的索引都是0,1,2..这样重新计算的,
提交后,里面的list封装数据,索引一样的数据都会被覆盖,所以只能提交一部分。
请问该如何解决呢,我觉得里面的list应该把外面的result list关联上提交就好了,比如
result[0].list[0].name,result[1].list[0].name...这样索引就具有唯一性了,但还没有找到关联的方法。请您赐教!
[解决办法]
如果你很急,先用JSP标签完成任务再说,我再看看!
还有,索引一样的不会被覆盖,
至少request.getParamegerValues();可以返回一个数组
- Java code
String[] strs = request.getParameterValues("list[0].name"); if(strs!=null){ for(String str : strs){ System.out.println(str); } }
[解决办法]
这个用STRUTS1.X确实比较麻烦,我以前看到有个叫MAX的网友做过
他的BLOG,http://www.blogjava.net/max/category/16130.html你去找下
[解决办法]
request.getParameterNames()你数据得名称有重复啊,当然只有一部分,你这些名字对应得都是一个数组得嘛。
struts得可能不支持嵌套哦。所有你只有获取后自己处理。
[解决办法]
你可以试一下struts1.x中的nested标签 下面是官方文档中的例子
<nested:iterate property="myBeanList" >
<nested:iterate property="myItemList" >
<html:write property="beanListObject/"><br>
</html:iterate>
</html:iterate>