批量封装对象(Bean)
不知道大家是否遇过这种情况,在一个页面里同时提交几个对象。例如,在发布产品的页面,同时发布几个产品。我在之前一个项目就遇到过这种需求,当时用的是Struts1.x。那是一个痛苦的经历,我在Google搜了很久都没有理想的结果。幸运的是,在Struts2.0中这种痛苦将一去不复返。下面我就演示一下如何实现这个需求。
首先,在源代码文件夹下的tutorial包中新建Product.java文件,内容如下:
packagetutorial;
importjava.util.Date;
publicclassProduct{
privateStringname;
privatedoubleprice;
privateDatedateOfProduction;
publicDategetDateOfProduction(){
returndateOfProduction;
}
publicvoidsetDateOfProduction(DatedateOfProduction){
this.dateOfProduction=dateOfProduction;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetPrice(){
returnprice;
}
publicvoidsetPrice(doubleprice){
this.price=price;
}
}
然后,在同上的包下添加ProductConfirm.java类,代码如下:
packagetutorial;
importjava.util.List;
importcom.opensymphony.xwork2.ActionSupport;
publicclassProductConfirmextendsActionSupport{
publicList<Product>products;
publicList<Product>getProducts(){
returnproducts;
}
publicvoidsetProducts(List<Product>products){
this.products=products;
}
@Override
publicStringexecute(){
for(Productp:products){
System.out.println(p.getName()+"|"+p.getPrice()+"|"+p.getDateOfProduction());
}
returnSUCCESS;
}
}
接看,在同上的包中加入ProductConfirm-conversion.properties,代码如下:
Element_products=tutorial.Product
再在struts.xml文件中配置ProductConfirmAction,代码片段如下:
<actionname="ProductConfirm"class="tutorial.ProductConfirm">
<result>/ShowProducts.jsp</result>
</action>
在WEB文件夹下新建AddProducts.jsp,内容如下:
<%@pagecontentType="text/html;charset=UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<html>
<head>
<title>HelloWorld</title>
</head>
<body>
<s:formaction="ProductConfirm"theme="simple">
<table>
<trstyle="background-color:powderblue;font-weight:bold;">
<td>ProductName</td>
<td>Price</td>
<td>Dateofproduction</td>
</tr>
<s:iteratorvalue="newint[3]"status="stat">
<tr>
<td><s:textfieldname="%{'products['+#stat.index+'].name'}"/></td>
<td><s:textfieldname="%{'products['+#stat.index+'].price'}"/></td>
<td><s:textfieldname="%{'products['+#stat.index+'].dateOfProduction'}"/></td>
</tr>
</s:iterator>
<tr>
<tdcolspan="3"><s:submit/></td>
</tr>
</table>
</s:form>
</body>
</html>
在同样的文件夹下创建ShowProducts.jsp,内容如下:
<%@pagecontentType="text/html;charset=UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<html>
<head>
<title>HelloWorld</title>
</head>
<body>
<table>
<trstyle="background-color:powderblue;font-weight:bold;">
<td>ProductName</td>
<td>Price</td>
<td>Dateofproduction</td>
</tr>
<s:iteratorvalue="products"status="stat">
<tr>
<td><s:propertyvalue="name"/></td>
<td>$<s:propertyvalue="price"/></td>
<td><s:propertyvalue="dateOfProduction"/></td>
</tr>
</s:iterator>
</table>
</body>
</html>