1.数组和集合的处理
jsp页面代码
<body>
<form action="add.action" method="post">
用户名:<input type="text" name="name"><br>
爱好:<input type="checkbox" name="hobbies" value="football"/>足球
<input type="checkbox" name="hobbies" value="football"/>足球
<input type="checkbox" name="hobbies" value="pingpang"/>乒乓
<input type="checkbox" name="hobbies" value="yumaoqiu"/>羽毛球<br>
喜欢游戏:<input type="checkbox" name="games" value="lol"/>英雄联盟
<input type="checkbox" name="games" value="dota"/>dota
<input type="checkbox" name="games" value="cs"/>反恐精英<br>
<input type="submit" value="提交"/>
</form>
</body>
Action处理
import java.util.List;
import com.opensymphony.xwork2.Action;
public class UserAction {
private String name;
private String[] hobbies;
private List<String> games;
public String execute(){
System.out.println(name);
System.out.println(hobbies.length);
System.out.println("-------------");
System.out.println(games);
return Action.SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getHobbies() {
return hobbies;
}
public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
}
public List<String> getGames() {
return games;
}
public void setGames(List<String> games) {
this.games = games;
}
}
2.集合对象的处理
这里写代码片
比如定义一个User,提交一组数据,jsp如下:
<form action="batch.action" method="post">
用户名:<input type="text" name="users.name"/>年龄:<input type="text" name="users.age"><br>
用户名:<input type="text" name="users.name"/>年龄:<input type="text" name="users.age"><br>
用户名:<input type="text" name="users.name"/>年龄:<input type="text" name="users.age"><br>
<input type="submit" value="提交"/>
</form>
上述是提交了三组数据,每组数据由name和age组成,如果我们只用第一种方式,struts2无法识别是一组数据,无法将name和age匹配处理,只会认为输入了6次,其中三次是没有age的,为0,三个是没有name的,为null,如下:
User [name=null, age=1]
User [name=null, age=2]
User [name=null, age=3]
User [name=1, age=0]
User [name=2, age=0]
User [name=3, age=0]
这就用到了集合对象处理的数据,struts2提供了一个插件(其实就是一个拦截器)struts-list-plugin1.0.jar
观察里面的struts-plugin.xml
显然我们struts.xml要继承list-default了。然后引用里面的拦截器栈
<action name="batch" class="cn.sxt.action.BatchAction">
<result >/index.jsp</result>
<interceptor-ref name="listStack"/>
</action>
jsp页面不变
Action的代码其实还是只用了数组,唯一的区别就是利用了插件(拦截器)就能匹配成功了
import java.util.List;
import cn.sxt.entity.User;
import com.opensymphony.xwork2.Action;
public class BatchAction {
private List<User> users;
public String execute(){
for(User u:users){
System.out.println(u);
}
return Action.SUCCESS;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
结果如下
User [name=1, age=1]
User [name=2, age=2]
User [name=3, age=3]
User类
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}