struts2_接收参数
struts2_接收参数有三种方法,属性驱动,模型驱动,域模型。
1、属性驱动
action中,声明属性user和age,并且一定要写setter()和getter()方法。使用时,直接使用user和age就可以。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.bjsxt.struts2.user.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String name; private int age; public String add() { System.out.println("name=" + name); System.out.println("age=" + age); return SUCCESS; } 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; } }
传入参数时,变量名和action中的属性名要一一对应,实际测试是和setter()方法对应,但是绝大多数情况下setter()方法和属性名是一致的,所以可以认为action中的user和age,在传入参数时,也要用user和age传入。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<a href="user/user!add?name=a&age=8">添加用户</a>
2、模型驱动
首先要建一个JavaBean,User
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.bjsxt.struts2.user.model; 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; } }
action中,要实现ModelDriven<User>接口,而且要泛型User,
new一个User对象,
private User user = new User();
重写getModel()方法,切忌,右键生成的重写方法,默认 return null,一定要改成return user;
使用user的属性需要使用user的getter()方法。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.bjsxt.struts2.user.action; import com.bjsxt.struts2.user.model.User; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } @Override public User getModel() { // TODO Auto-generated method stub return user; } }
参数传入时,变量名和JavaBean的属性名一致。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<a href="user/user!add?name=a&age=8">添加用户</a>
3、域模型
建一个JavaBean,同模型驱动,不多说了。
声明一个User对象,但是不需要new,struts2会帮我们new,但是要写setter()和getter()方法,
使用user的属性需要使用user的getter()方法。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.bjsxt.struts2.user.action; import com.bjsxt.struts2.user.model.User; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private User user; //private UserDTO userDTO; public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
传入参数时,需要写 对象.属性=值,此处不同于模型驱动和属性驱动
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<a href="user/user!add?user.name=a&user.age=8">添加用户</a>
该方法有一点要注意,有时需要传入的对象或者说对象个数和JavaBean不一致,例如JavaBean只有name和password,但是传入的参数有name、password和confirmingPassword,就是确认密码,这时action就不能直接用User对象了,需要使用一个数据传输对象(dto),其实就是另外一个JavaBean,包含3个属性,接收参数后,经过处理,将name和password的值,new一个User对象时传入user即可。模型驱动似乎也会遇到这个问题,以后再具体研究。