快速业务通道

提交多行数据到Struts的ActionForm的List属性中 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
count的name属性

输入框名为 stocks[0].code 提交后会设置到 accountStockForm 的 List stocks的第一个元素的code属性.以此类推

在提交表单前要重排行层的索引,从 0 起, 否则到后右的 Form 会一些空数据.

提交多行数据到Struts的ActionForm的List属性中(3)

时间:2011-03-23 隔叶黄莺

三: AccountStockForm 的关键代码

private Account account = new Account(); private List stocks = new AutoArrayList(Stock.class); public void setStocks(List stocks) {    this.stocks.clear();    this.stocks.addAll(stocks); }    private Account account = new Account();    private List stocks = new AutoArrayList(Stock.class);    public void setStocks(List stocks)    {      this.stocks.clear();      this.stocks.addAll(stocks);    }

定义了两个属性,分别是一个bean(Account,接受基本信息)和一个List(stocks,接受股票行信息),注意这两个属性必须初始化,不然在表单提交后会出现空指针错误. setStocks方法是让stocks属性永远保有持是一个 AutoArrayList 实例. 这样在表单提交后设置值是总能调用 AutoArrayList 的 get(int index) 方法.

四: 自定义的 AutoArrayList

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);    } } 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);    } }

理解为什么要继承一个ArrayList, 覆写get(int index)方法要简单了解 Struts 处理提交数据的工作原理: 大致如下: 页面提交后, 由 ActionServlet交给RequestProcessor的processPopulate()方法,由processPopulate()方法收集请求数据,放在map中,key为表单域的name属性,如 name, account.name, stocks[0].code. 然后借助于 Common-beanutils 工具包设置到 ActionForm 的相应属性中

如果key是简单的''name'',直接form.setName(map.get(''name''));

如果key是''account.name'', 执行的操作是 form.getAccount().setName(map.get(''account.name'');

如果key是''stocks[0].code'', 它可以对应到数据或集合中,如对于数组 form.stocks[0].code=map.get(''stocks[0].code''); 对于集合(List) form.get(0).setCode(map.get(''stocks[0].code''))

从上也能理解为什么 form 中的那两个属性必须实始化,不然会出现空指针错. 而且为什么 stocks 要用 AutoArrayList 实例化, 避免出现索引越界的错误.

提交多行数据到Struts的ActionForm的List属性中(4)

时间:2011-03-23 隔叶黄莺

五: 在 AccountStockAction 中可以打印出提交的数据

AccountStockForm asForm = (AccountStockForm)form; Account account = asForm.getAccount(); System.out.println("Ac

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号