首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

struts1.x包孕嵌套List的多行提交

2012-09-12 
struts1.x包含嵌套List的多行提交普通的多行提交没任何问题,可现在这个业务比较特殊一般的多行提交,从一个

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>

热点排行