Struts2批量数据的提交
最近遇见一个问题就是struts2当中批量的数据如何提交到action中去,几经转折最终实现了这样的功能。
下面是action的代码:
public class OrderManageAction extends ActionSupport {private Order order; //订单的POprivate List<Product> list = new ArrayList<Product>(); //订单物品list对象。数据库order和product是主从表关系。 ... ... ... ... public String execute() throws Exception{ System.out.println(order.getDate()+" "+order.getOrderName()); System.out.println(this.list.size()); // 简单的打印一下list的大小。查看是否把数据封装进去了 } }?
?? 下面的工作就是定义一个转换器,如果是使用的struts2的标签库,那么日期格式的字符串Struts2会自动帮我们转换,但是对于普通的HTML标记,date类型的也是需要写转换器的。在此就不书写了。下面定义一个对list的转换器。
???
package com.wh.conversion;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.wh.bean.Product;public class ProductListConverter extends StrutsTypeConverter {@Overridepublic Object convertFromString(Map context, String[] values, Class toClass) {int trNum = values.length / 7;List<DetailPO> list = new ArrayList<DetailPO>();int pointer = 0;for (int i = 1; i <= trNum; i++) {Product product = new Product(); product.setName(values[pointer]); product.setAdress(values[++pointer]); list.add(product);pointer = i * 7;}return list;} //将页面的数据取出来。然后封装成Product对象,然后放置到list中去@Overridepublic String convertToString(Map context, Object o) {// TODO Auto-generated method stubreturn null;}}?
?? 最后是页面JSP书写了。页面很简单,就是你的批量的数据就是Product这个PO对应在页面的input框的name值都必须为list。这样就完成了。
?? 在页面配置name的时候还可以采用一种方式,name="list[0].name",name="list[0].adress" 这样就不需要转换器就可以直接提交数据。但是个人觉得使用第一种方法比较好一点。