以前,我们如果在一个FORM中要实现在这个FORM中对多个对象同时保存,是件很麻烦的事情,在struts2.0中,我们可以利用ognl方式来实现多个对象的同时保存.
1.ognlCollection.jsp
方式一:
<form action="ognlcollection.action" method="post">
<input type="text" name="products[0].name" value="aaa" />
<input type="text" name="products[1].name" value="bbb" />
<input type="text" name="products2[0].name" value="ccc" />
<input type="text" name="products2[1].name" value="ddd" />
<input type="submit" value="submit" />
</form>
在JAVA中有一个procutcs的LIST,该属性名要和JAVA中的属性名称对应起来.
方式二:通过用纯OGNL表达式来做
<s:iterator value="new int[3]" status="stat">
<tr>
<td><s:textfield name="%{'products['+#stat.index+'].name'}"/></td>
<td><s:textfield name="%{'products['+#stat.index+'].price'}"/></td>
<td><s:textfield name="%{'products['+#stat.index+'].dateOfProduction'}"/></td>
</tr>
</s:iterator>
通过iterator方式,NEW出三个对象
"%{'products['+#stat.index+'].name'}"通过索引来标记不同的对象,然后插入到后台的LIST当中#stat.index表示取出其中的索引.
2.OgnlCollectionAction.java
package com.ognl.action;
import java.util.List;
import java.util.Map;
import com.bean.Product;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.Element;
import com.vo.User;
public class OgnlCollectionAction extends ActionSupport {
List<User> users;
List<Product> products;
@Element(value = Product.class)
List products2;
//在这里通过两种方式来写LIST.第一种通过泛型,所以不用指出保存在LIST中的对象类型.第二中则是以前不用泛型的方式.必须要加上一个Annotation来表示保存在LIST中的对象名.
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
@Override
public String execute() throws Exception {
System.out.println("------------------");
for(Product p : products)
{
System.out.println("products name : "+p.getName());
}
System.out.println("products2[0] name : "+((Product)products2.get(0)).getName());
System.out.println("products2[1] name : "+((Product)products2.get(1)).getName());
return null;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public List getProducts2() {
return products2;
}
public void setProducts2(List products2) {
this.products2 = products2;
}
/*public List getUsers2() {
return users2;
}
public void setUsers2(List users2) {
this.users2 = users2;
}
public Map<String, User> getUsersMap() {
return usersMap;
}
public void setUsersMap(Map<String, User> usersMap) {
this.usersMap = usersMap;
}
public Map getUsersMap2() {
return usersMap2;
}*/
/*public void setUsersMap2(Map usersMap2) {
this.usersMap2 = usersMap2;
}*/
}
3.struts.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="ognl" class="com.ognl.action.OgnlAction">
<result name="result">/ognl.jsp</result>
</action>
<action name="ognlcollection" class="com.ognl.action.OgnlCollectionAction">
</action>
</package>
</struts>