我在form里面有一个数组或者是arraylist,想通过jsp传递到下一个action,前提是request level,不能用session level,jap上的代码如下:
<logic:iterate name="Form" property="details" indexId="ndx" type="com.Detail" id="form" scope="request">
  <tr>
  <td align="center"><a href="#" onClick="location='detailEdt.do?detailno=<bean:write name="form" property="detailno" />'"> 
                                <bean:message key="label.edit"/></a>
                                </td> 
        <td align="center" >
        <a href="#" onClick='Del(<bean:write name="form" property="detailno" />)' > 
        <bean:message key="label.del"/></a>
      
    </td>
    <!-- result body follows -->
    <td align="right"><bean:write name="form" property="productname" /></td>
    <td align="right"><bean:write name="form" property="model" /></td>
    <td align="right"><bean:write name="form" property="unitprice" /></td>
    <td align="right"><bean:write name="form" property="quantity" /></td>
    <td align="center"><bean:write name="form" property="subtotal" /></td>
  </tr>
</logic:iterate>提交时的代码是:
<input type="button" name="add" value='<bean:message key="button.new"/>' onClick='submitto(this.form,"detailIns.do")'>
也就是说这个form中数组的属性名是details,在Form中,提交的是整个的form,但scope用request level死活在下一个action也取不到这个数组,望高人指点!!小弟感激不尽!!!

解决方案 »

  1.   

    是下个action中用
    Form f = request.getAttribute(Form);
    就是form已经传下来了,form里其他的值可以取到.
    但就是这个数组或者arrayList的属性取不到.
    还有补充一下,用session可以取到,但数据量大,不可能用session
      

  2.   

    <logic:iterate name="Form" property="details" indexId="ndx" type="com.Detail" id="form" scope="request">
    <tr>
      <td align="center">
        <a href="#" onClick="location='detailEdt.do?detailno=<bean:write name="form" property="detailno" />'"><bean:message key="label.edit"/></a>
      </td>
      <td align="center">
        <a href="#" onClick='Del(<bean:write name="form" property="detailno" />)' ><bean:message key="label.del"/></a>
      </td>
      <td align="right"><bean:write name="form" property="productname" /></td>
      <td align="right"><bean:write name="form" property="model" /></td>
      <td align="right"><bean:write name="form" property="unitprice" /></td>
      <td align="right"><bean:write name="form" property="quantity" /></td>
      <td align="center"><bean:write name="form" property="subtotal" /></td>
    </tr>
    </logic:iterate>
    这样好点了吗?
      

  3.   

    我的意思是想循环往这个数组里面加dto,但就是保存不住
      

  4.   

    =======希望可以帮到你========<logic:iterate name="Form" property="details" indexId="ndx" type="com.Detail" id="form" scope="request">
    <tr>
      <td align="center">
        <a href="#" onClick="location='detailEdt.do?detailno=<bean:write name="form" property="detailno" />'"><bean:message key="label.edit"/></a>
      </td>
      <td align="center">
        <a href="#" onClick='Del(<bean:write name="form" property="detailno" />)' ><bean:message key="label.del"/></a>
      </td>
    <td align="right">
    <bean:write name="form" property="productname" />
    <html:hidden name="form" property="productname" />
    </td>
    <td align="right">
    <bean:write name="form" property="model" />
    <html:hidden name="form" property="model" />
    </td>
    <td align="right">
    <bean:write name="form" property="unitprice" />
    <html:hidden name="form" property="unitprice" />
    </td>
    <td align="right">
    <bean:write name="form" property="quantity" />
    <html:hidden name="form" property="quantity" />
    </td>
    <td align="center">
    <bean:write name="form" property="subtotal" />
    <html:hidden name="form" property="subtotal" />
    </td>
    </tr>
    </logic:iterate>
      

  5.   

    先谢谢,现在的问题不是说只是值取不到,是整个的这个数组如果用request的话从jsp就传不下去,jsp的form里面有对应的数组属性啊...真郁闷
    再次谢谢楼上的回答
      

  6.   

    为什么不把 Action/Form 相关代码也贴出来呢
      

  7.   

    <logic:equal name="Form" property="nodatafound" value="true">
              <div class="fmessage">
                  <bean:message key="message.warn.search.noresult"/><br/>
                  <bean:message key="message.warn.search.noresult.action"/>
              </div>
          </logic:equal>
          <!--End 3. Message block -->
      
          <!-- 4. Main content block-->
          <logic:equal name="Form" property="nodatafound" value="false">
              
              <table width="765"" border="0" cellpadding="3" cellspacing="1" class="table01">
              <!--search result header-->
              <tr height="20">
              <td width="30" align="center"><bean:message key="label.edit"/></td>
              <td width="30" align="center"><bean:message key="label.del"/></td>
                  <td align="center"><bean:message key="label.productname"/></td> 
                  
                  <td align="center"><bean:message key="label.model"/></td> 
                  <td align="center"><bean:message key="label.unitprice"/></td> 
                  <td align="center"><bean:message key="label.quantity"/></td> 
                  <td align="center"><bean:message key="label.subtotal"/></td> 
              </tr>
          <!--end search result header-->
          
          <!--search result loop-->   <logic:iterate name="Form" property="details" indexId="ndx" type="com.Detail" id="detail" scope="request">
      <tr>
      <td align="center"><a href="#" onClick="location='detailEdt.do?detailno=<bean:write name="detail" property="detailno" />&iffirst=1'"> 
                                    <bean:message key="label.edit"/></a>
                                    </td> 
            <td align="center" >
            <a href="#" onClick='detailDel(<bean:write name="detail" property="detailno" />)' > 
            <bean:message key="label.del"/></a>     </td>
        <!-- result body follows -->
        <td align="right"><bean:write name="detail" property="productname" /></td>
        <td align="right"><bean:write name="detail" property="model" /></td>
        <td align="right"><bean:write name="detail" property="unitprice" /></td>
        <td align="right"><bean:write name="detail" property="quantity" /></td>
        <td align="center"><bean:write name="detail" property="subtotal" /></td>
      </tr>
    </logic:iterate>
      <!--end search result loop--> 
      
      
    </table>
      
        <!--5. Special block of Pager links-->
        
        <!--End 5. Special block of Pager links-->
    </logic:equal>
    这里是JSP的代码,JSP用的form是Form,这个Form里有一个属性是数组,对了,说一下,用的是struts,下面是action的:
    Form f = (Form)request.getAttribute(Form);
    log.info("details====="+f.getDetails());
    log.info("details.length====="+f.getDetails().length);
    上面这两句是输出语句,相当于System.out.println();
    打出的是,console中的:
    [INFO] DetailInsAction - f.getDetails()========[Lcom.Detail;@1439c50
    [INFO] DetailInsAction - f.getDetails().length=======1
    但Form里除了这个数组以外的其他属性都能取到....大家帮帮忙啦!!!
      

  8.   

    错了,上面的info第二句是[INFO] DetailInsAction - f.getDetails().length=======0,如果是一我也不用问了..晕!
      

  9.   

    lz,先学习一下在html中如何进行<form action>提交,那是需要<input>/<select>/<textarea>的
      

  10.   

    ??
    什么?没懂,
    这里的数组属性相当于一个input String的属性,只不过是个dto的数组而已.
    上面的代码只是JSP其中的一部分,其他的String都可以取到,只是这个数组属性取不到
      

  11.   

    shine333(enihs) 说的应该跟我上面写的是一个意思,你jsp上那样写,form提交的时候,应该是收集不到<bean:write name="detail" property="productname" />...这些值的,所以我每个后面用了一个<html:hidden ... /> 请大虾指点...
      

  12.   

    加上了也一样的取不到啊,
    其实不是要非加hidden,他取的时候是取数组,如果不加hidden可能是数组里面的DTO没有数值,但数组的长度一定不会为0,就是数组能传下来,不过数组里面没值而已,现在是数组压根儿就传不动啊..
      

  13.   

    你那么多话,直接把Form(还有相关DTO)的结构贴出来
      

  14.   

    import java.io.Serializable;import javax.servlet.http.HttpServletRequest;
    import org.apache.struts.action.ActionMapping;import com.ebiz.ecomp.dto.Orderdetail;
       
    public final class SalesorderForm extends BaseActionForm implements Serializable { 
        private String orderno="";
        private String orderid="";
        private String customerno="";
        private String salesid="";
        private String totalamount="";
        private String salestax="";
        private String currency="";
        private String orderdate="";
        private String billaddrno="";
        private String paymethod="";
        private String prepaidamount="";
        private String balanceamount="";
        private String shipaddrno="";
        private String shipdate="";
        private String orderstatus="";
        private String res="";
        private String company="";
        private String createdby="";
        private String modifiedby="";
        private String modifieddate="";
        private String external="";
        private String shopcartno="";
        private String lockcount="";
        private long pkholder = 0; 
        private boolean nodatafound = false; 
        private boolean toomanyrows = false; 
        
        private String customername = "";
        private String billaddress = "";
        private String shipaddress = "";    private String orderdetailno="";
        private String orderno2="";
        private String lineno="";
        private String productno="";
        private String catitemno="";
        private String unitprice="";
        private String quantity="";
        private String uom="";
        private String shipmethod="";
        private String shippingcost="";
        private String discount="";
        private String subtotal="";
        private String company2="";
        private String lockcount2="";
       
        private String productname = ""; 
        private String uomdesc = "";  
        private String shipmethoddesc = ""; 
        private String companyname = "";  
        private String madeincountry = "";  
        private String countrydesc = ""; 
        
        private String orderstatusdesc="";
        private String currencydesc="";
        
        private String contact = "";
        private String contactcall = "";
        
        private Orderdetail[] orderdetails=new Orderdetail[0];
        //private Orderdetail formOrderdetail=null; 
        private String paymethoddesc="";
        
        private String flag = "";
        
        private String orderdate2 = "";
        private String orderstatus2 = "";
        
        private String entityname = "";
        private String productname2 = "";public SalesorderForm() { 
        super();
    } public SalesorderForm(String mod, String act, String cli) { 
        super(mod, act, cli);

    下面就是getter和setter方法就不贴了.
    这里贴不了太多,上面那个form中的private Orderdetail[] orderdetails=new Orderdetail[0];就是那个dto的数组,
    在action中,应该把从JSP取到的值封装成DTO,循环加到这个数组里面,再传回给JSP,
      

  15.   

    我的msn:[email protected]大家有空的加我一下,我现在在线!!!~~~拜托啦!!现在有问题连个请教的人都没有,谢谢谢谢!!!
      

  16.   

    假设你的Orderdetail是
    class Orderdetail {
      int x;
      String y;
    }那么HTML页面上对应的就应该是
    <input name="orderdetails[0].x" type="hidden" value="1">
    <input name="orderdetails[0].y" type="hidden" value="ABC"><input name="orderdetails[1].x" type="hidden" value="2">
    <input name="orderdetails[1].y" type="hidden" value="XYZ">...这点是最重要的,接下来,JSP怎么个写法就看个人喜好了,只要Struts taglib或者<%=%>代码能够生成这样的HTML比如<html:hidden name="detail" property='<%= "orderdetails[" + ndx + "].x" %>' />
      

  17.   

    package com.ebiz.ecomp.dto;public class Orderdetail implements java.io.Serializable, Comparable {
        // Primary key column Orderdetailno (NUMBER)
        private String orderdetailno; 
        
        // Not Null column Orderno (NUMBER)
        private String orderno; 
        
        // Not Null column Lineno (NUMBER)
        private String lineno; 
        
        // Not Null column Productno (NUMBER)
        private String productno; 
        
        // Not Null column Catitemno (NUMBER)
        private String catitemno; 
        
        // Not Null column Unitprice (NUMBER)
        private String unitprice; 
        
        // Not Null column Quantity (NUMBER)
        private String quantity; 
        
        // Not Null column Uom (NVARCHAR2)
        private String uom; 
        
        // Nullable column Shipmethod (NVARCHAR2)
        private String shipmethod; 
        
        // Nullable column Shippingcost (NUMBER)
        private String shippingcost; 
        
        // Nullable column Discount (NUMBER)
        private String discount; 
        
        // Not Null column Subtotal (NUMBER)
        private String subtotal; 
        
        // Not Null column Company (NUMBER)
        private String company; 
        
        // Nullable column Lockcount (NUMBER)
        private String lockcount;
        
        private String productname; 
        private String uomdesc;   
        private String shipmethoddesc;
        private String companyname; 
        private String madeincountry; 
        private String countrydesc;
        private String currency;
        private String currencydesc;
        private String model;
            public Orderdetail() { 
            super();
        } 这个是Orderdetail........
    不可能在JSP页面上写这么多的hidden,
    而且现在的问题是用session传的话什么问题都没有,但用request就不行
      

  18.   

    补充一下,如果把JSP页面上的scope="request"改成scope="session",mapping里面也改成session的话,就一切正常..
      

  19.   

    shine333(enihs) 
    说的对,找他的路子走肯定没问题,其他的都不对
      

  20.   

    请shine333(enihs) 鉴赏一下我的问题,有点挑战性关于struts中actionservlet组装actionform中带索引的属性的细节
    http://community.csdn.net/Expert/TopicView.asp?id=5215706
      

  21.   

    感觉楼主的问题应该是数组实例化的问题,你放入request的是数组的引用,真正调用的时候,找不到具体的数据,我在hibernate使用的时候遇到过这种问题。具体的解决方案,楼主自己看下了。