form提交多个对象

声明:这篇博文写的对别人没有什么参考价值,仅仅给自己留个思路。

最近弄一个项目,基本业务是这样子的:

我选了5个工程,填到一个单子,根据单子的类型生成对应的单子,譬如说我选了两种单子类型,那么久需要生成2张单子,反正每个类型生成一个单子。

到这还没完,这个工程也是要分别生成资料单子的,譬如每个合同都对应一个合同文件,选了5个,就需要生成5份资料单子,也就是5个资料对象。

这就涉及到一个form表单提交好几个对象的问题,当然有了Spring这个问题解决起来也是小case。

说明:

工程单子对应的表:Table51

资料单子对应的表:Table55

1、先实例化一个Table51的对象,并给它get、set方法。再实例化一个List<Table55> table55List对象,也给它get、set方法。然后从Action中根据选定的工程获取每个工程的信息,并添加到Table51对象和table55对象中。通过request传递到页面上去。

2、JSP页面处理,这个是关键。处理Table51对象不是问题,处理Table55的多个对象是个大问题。因为Table55对象有多个,页面中用C:forEach标签循环,并且给input框添加上name属性,name='t55.field1'。这样子加完之后,一循环,这个form表单中就会出现多个name为t55.field1的input框,在提交的时候,这写同名的input内容就会被拼接到一起作为name='t55.field1'的字段值,从后台中直接获取t55.getField1()得到的就是所有name='t55.field1'值的集合。这当然不符合要求,为什么?字符串是用“,”进行连接的,万一我在填单子的时候手动输入了一个逗号,这样子就没法区分了。必须的给input一个既跟table55有关联又跟字段有关联还能一个form表单就提交多个table55对象的名字才行,试了好多回,最后的修改成功如下:

<!--普通情况:获取到的值只有拼接好的一个字段值-->
<c:forEach items="${table55List}" var="t55" varStatus="order">
<input type="text" value="${t55.field1 }" name="t55.field1" />
</c:forEach>

<!--修改之后:可以获取到多个对象,且每个对象对应字段的值独立-->
<c:forEach items="${table55List}" var="t55" varStatus="order">
<input type="text" value="${t55.field1 }" name="table55List[${order.index }].field1" > />
</c:forEach>

 修改之后的代码,因为每次循环得到的对象的name都不一样,所以传递到后台的结果也就不一样了。

3、后台接收:这个比较简单,list都拿到了,遍历一遍添加到数据库就OK啦。

猜你喜欢

转载自1017401036.iteye.com/blog/2238678