Struts 的批量封装有几种方法:
1、 有form 来封装
2、 用动态form
3、 用隐藏域
这里主要介绍用动态form 来进行封装
1步:在struts.xml中写actionform写映射
<form-bean name="dynaTravelForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="saction" type="java.lang.String"></form-property>
<form-property name ="resourceNotices"
type ="com.bsteel.baointl.baotong.contract.form.BtTravelResourceForm"/>
</form-bean>
2步:写相关的form 类
//BtTravelResourceForm 类
public class BtTravelResourceForm {
private static final long serialVersionUID = 1L;
private int id ;
//相关的javaBean内的一些集合
private List traveResources = new AutoInitArrayList(BtTravelResource.class);
private String saction;
}
//AutoInitArrayList 类
public class AutoInitArrayList extends LinkedList{
private static final long serialVersionUID = 1L;
/** 容器内保存的类 */
private Class clazz;
/**私有构造函数,保证外界无法直接实例化*/
private AutoInitArrayList() {
}
public AutoInitArrayList(Class clazz) {
this.clazz = clazz;
}
3步:在Action类获得封装的对象
protected ActionForward execute(ActionContext context) throws Exception {
DynaValidatorForm frm = (DynaValidatorForm) context.getForm();
BtTravelResourceForm btf=(BtTravelResourceForm)frm.get("resourceNotices");
List list = btf.getTraveResources(); //获得所有页面上的对象
4步:在页面上写映封装数据时的映射
<%
int i = 0;
for (int j =0;j<10;j++){
%>
<tr align="center">
<td><%=++i %></td>
<td><INPUT type="text"
//注意name 的命名
name="resourceNotices.traveResources[<%=i-1 %>].client" value="" size="8" /></td>
.......
</tr>
二、 用form 的方法 就继承ActionForm,在form 中定义Model类的集合,然后在页面上定义即可
三、用隐藏域的方法 ,在每个要封装的对象面前,放一个隐藏域,一个隐藏域,封装一个对象,把它的属性用字符串连接,存储到隐藏域的值中,然后再把隐藏域中的值拿出来
用 getparamsNames 拿出隐藏集合,再用字符串分割来获取每个属性