我在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也取不到这个数组,望高人指点!!小弟感激不尽!!!
<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也取不到这个数组,望高人指点!!小弟感激不尽!!!
Form f = request.getAttribute(Form);
就是form已经传下来了,form里其他的值可以取到.
但就是这个数组或者arrayList的属性取不到.
还有补充一下,用session可以取到,但数据量大,不可能用session
<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>
这样好点了吗?
<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>
再次谢谢楼上的回答
<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里除了这个数组以外的其他属性都能取到....大家帮帮忙啦!!!
什么?没懂,
这里的数组属性相当于一个input String的属性,只不过是个dto的数组而已.
上面的代码只是JSP其中的一部分,其他的String都可以取到,只是这个数组属性取不到
其实不是要非加hidden,他取的时候是取数组,如果不加hidden可能是数组里面的DTO没有数值,但数组的长度一定不会为0,就是数组能传下来,不过数组里面没值而已,现在是数组压根儿就传不动啊..
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,
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" %>' />
// 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就不行
说的对,找他的路子走肯定没问题,其他的都不对
http://community.csdn.net/Expert/TopicView.asp?id=5215706