public class ModifyBatchContactForm extends ActionForm
{
private List contact =new AutoArrayList (Contact.class);
…..
}
在以上代码中,我们同样处理了 List 类型数据的初始化。 Struts 在给 List 中的对象赋值时,当然需要先获取 List 数据,然后在获取 List 中某一个对象(通过 Index ),最后给对象赋值。在这里想我们可以更详细点分析浏览器端传过来数据,字段值形式如下: contact[0].email=linux_china@hotmail.com , Struts 获取 ActionForm 中的 List 数据后,通过 Index (此时为 0 )来获取 List 中封装的 JavaBean 对象,然而此时 List 是空的(尽管初始化了,但是没有数据),是无法取得封装的对象的,因此我们要在 Struts 获取 List 中封装的对象的时候给它创建一个,这样就保证对象的获取和赋值的成功进行,所有我们新建一个 AutoArrayList 类,继承 ArrayList ,只要重写 get(int index) 方法即可,其实很简单,代码如下:
public class AutoArrayList extends ArrayList {
private Class itemClass;
public AutoArrayList(Class itemClass) {
this.itemClass = itemClass;
}
public Object get(int index) {
try {
while (index >= size()) {
add( itemClass.newInstance());
}
} catch (Exception e) {
e.printStackTrace();
}
return super.get(index);
}
}
这样我们就完成可以多行数据提交的 ActionForm 设计,这里还有点提醒,如果从浏览器端传过来的行索引是跳跃是的,如缺少中间行,而你不想要这些数据的话,且首尾行 index 相差很大的话,这种方式可能不太适合。这种多行提交形式比较适合对固定行的数据处理。如果行数不固定的话,你可以参考使用 MapForm 方式实现。