比如
  字段1,        字段2,        字段3,    字段4   
  1             1             1         1   
  2             2             2         2   
  3             3             3         3   
  4             4             4         4   
  5             5             5         5   
  提交按扭 如何定义接收这些数组 
如果能够指导一下DAO怎么写那就更好了(Hibernate)
新手新手  。

解决方案 »

  1.   

    只能是把各个对应的属性名设置为数组形式了,在页面中每个相同字段的数据都是同一个name,然后循环操作
      

  2.   

    怎么会需要提交这样的数据呢 ,你的一行对应数据库的一条记录么?我的了解是struts2的拦截器好像不能拦截这样的数据.(只能拦截map形式的,list好像不行)一种做法就是在action里面定义
    String 字段1 ;
    String 字段2;
    ....
    然后你前台提交的时候要把所有字段1的拼接到一起,如拼接成 1,2,3,4,5;在提交.然后再在action里面处理下.
      

  3.   

    各位高手能否在给得详细点
    比如用list封装,在用map封装list怎么办?
      

  4.   

    楼主的这个业务要求可以先用一个类(TestProduct)封装那几个字段,然后再把TestProduct放到一个Map里(Map<String, TestProduct> products)。具体代码如下:products_ognl.jsp 这个产品录入界面:<%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
    <title>使用OGNL表达式进行类型转换</title>
    </head> <body>
      字符串到Product的转换<p/>
          <form action="product.action" method="post">     
          <table border="1">
           <tr>
           <td>产品1</td>
           <td>
               <s:textfield label="名称" name="products['product1'].name" />
               <s:textfield label="价格" name="products['product1'].price" />
               <s:textfield label="数量" name="products['product1'].count" />
           </td>
           </tr>
           <tr>
           <td>产品2</td>
           <td>
               <s:textfield label="名称" name="products['product2'].name" />
               <s:textfield label="价格" name="products['product2'].price" />
               <s:textfield label="数量" name="products['product2'].count" />
           </td>
           </tr>
           <tr>
           <td>产品3</td>
           <td>
               <s:textfield label="名称" name="products['product3'].name" />
               <s:textfield label="价格" name="products['product3'].price" />
               <s:textfield label="数量" name="products['product3'].count" />
           </td>
           </tr>
          </table>           
              <input type="submit" value="提交"/>
          </form>
    </body>
    </html>TestProductAction.javapublic class TestProductAction extends ActionSupport {

    private Map<String, TestProduct> products;

    public String execute() throws Exception {

    TestProductDAO testProductDAO = new TestProductDAO();

    testProductDAO.saveProducts(getProducts());

    return SUCCESS;
    } public void setProducts(Map<String, TestProduct> products) {
    this.products = products;
    } public Map<String, TestProduct> getProducts() {
    return products;
    }
    }TestProduct.javapublic class TestProduct implements Serializable {

    private Long id = null;

    private String name;
    private float price;
    private int count;

    public TestProduct() {}

    public void setId(Long id) {
    this.id = id;
    } public Long getId() {
    return id;
    } public void setName(String name) {
    this.name = name;
    } public String getName() {
    return name;
    } public void setPrice(float price) {
    this.price = price;
    } public float getPrice() {
    return price;
    } public void setCount(int count) {
    this.count = count;
    } public int getCount() {
    return count;
    }
    }TestProductDAO.javapublic class TestProductDAO { public void saveProducts(Map<String, TestProduct> products) { Session session = null;
    Transaction tx = null; try { session = HibernateSessionFactory.getSession();
    tx = session.beginTransaction(); for (TestProduct product : products.values()) {
    session.save(product);
    } tx.commit();
    } catch (HibernateException e) {
    try {
    tx.rollback();
    } catch (HibernateException rbe) {
    rbe.printStackTrace();
    }
    } finally {
    HibernateSessionFactory.closeSession();
    } }
    }productsview_ognl.jsp 这个是产品显示界面:<%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
    <title>显示Product的属性值</title>
    </head> <body>   
      <table border="1">
    <tr><td>产品</td><td>名称</td><td>价格</td><td>数量</td></tr>
    <s:iterator id="product" value="products">
        <tr>
          <td>${product.key}</td>
             <td>${product.value.name}</td>
             <td>${product.value.price}</td>
             <td>${product.value.count}</td>
           </tr>
    </s:iterator>
      </table>         
    </body> 
    </html>
      

  5.   

    这个是struts2.0 多表单提交比较容易实现
    首先在action中定义一个容器比如List<Orderitem> orderItems=new ArrayList<Orderitem>();
    当然要给上get,set方法、Orderitem的po文件当然要有,hibernate自动生成呵呵。
    让后就是展现页面,比如jsp页面form中这么写
    <tr>
            <td>名称</td><td><input name="orderItems[1].itemname" value="xxx"></td>
    </tr>
    <tr>
            <td>名称</td><td><input name="orderItems[2].itemname" value="xxx2td>
    </tr>
    <tr>
            <td>名称</td><td><input name="orderItems[3].itemname" value="xxx3<td>
    </tr>这样在Action中就可以给List容器赋上值了(反射机制)。
    当然既然可以拿到list容器了,所谓的增删改都很容易进行。
    dao很容易些,而且是用hibernate 只要有对象,session拿到,session.delete(obj)事物提交 就搞定
    一个对象可以搞定。那多个对象就也不在话下了。
      

  6.   

    首先先谢谢大家
    我大概能够理解了
    但是假定是表单的数目是不确定
    好比有一个按钮  可以添加行数
    字段1,        字段2,        字段3,    字段4  
      1            1            1        1  
      2            2            2        2  
      3            3            3        3  
      4            4            4        4  
      5            5            5        5  
      提交按扭  
      添加行那这样写
    <input name="orderItems[X].itemname" value="xxx2td> X都是写死的
    可否有个更好的方案?
    那这样子又怎么办?  
      

  7.   

    LS的要求可以通过Struts2的标签和JS结合的方式来解决。
    前面几楼的各位高手已经都阐述了如何用Struts2标签实现固定行数的数据传递,动态添加行的基本思路和这个是一样的。
    如果你要在页面上实现添加一行,一般的思路首先是要通过JS给每一行指定一个递增的行ID,同样的思路,在指定行ID的时候,那个参数也可以对应填充到每个标签里面。
      

  8.   

    今天试着用一个list试着来接受
    我这样写  比如
    字段1,        字段2,        字段3,    字段4  
      1            1            1        1  
      2            2            2        2 action中我是这样写的list 字段1
    list 字段2
    ……
    但是会爆出
    java.lang.NullPointerException
    何解?
    各位大侠  help me
    我做了一天了。。   
    崩溃ing
      

  9.   

    在jsp中的input我是这样写的(忽略表格)
    字段1                        字段2
    <input name="字段1" value=""><input name="字段2" value="">
    <input name="字段1" value=""><input name="字段2" value="">
      

  10.   

    我开始说不能拦截list类型很抱歉,没有具体操作就那样说了。这样写
    ation中
    list<String> list1;(这里list里面可以用其他类型)
    list<String> list2;
    确保有get set 方法。
    页面上 
    <input name="list1[0]" value=""> <input name="list[0]" value=""> 
    <input name="list1[1]" " value=""> <input name=list[1]" value=""> .
    如果报空指针的话 将aciton里面的参数初始化
    list<String> list1= new ArrayList<String>();
    list<String> list2= new ArrayList<String>();
      

  11.   

    action中用一个list对应,方便以后做校验具体参照楼上们的方法
      

  12.   

    完成了
    也是用list的
    思路跟上面各位的差不多
    谢谢大家