在Struts2中,页面(指的是浏览器,不过在实际的开发中,不管是浏览器端还是手机端,前后端数据的交互都是用json)的请求苏剧和Action有两种基本的对应方式,分别是字段驱动方式(属性驱动)和模型驱动方式。
1、属性驱动
属性驱动通过字段进行数据传递,包括两种情况:
1、与基本数据类型的属性对应;
比如:
public class UserAction{
private String username;
private String password;
//getter、setter方法
public String execute() throws Exception{
return SUCCESS;
}
}
2、直接使用域对象。
在第1种方法中,如果传入的参数很多的话,Action类的代码将变得越来越多,这时候应该考虑使用域对象。
使用域对象,将所有字段作为一个实体类的属性,它们应该一一对应。
比如:
public class User{
private String username;
private String password;
private int age;
//getter、setter方法
}
public class UserAction extends ActionSupport{
private User user;
public User getUser(){
return user;
}
public void setUser(User user){
this.user = user;
}
public String executer() throws Exception(){
//。。。。代码
return SUCCESS;
}
}
在使用域对象的时候,为了使jsp页面可以传值给域对象,格式必须是“对象.属性名”,为什么需要加前缀呢,因为属性驱动的Action类里面有多个域对象,只有对象.属性名才能确定表单的值到底赋到哪个对象里的哪个属性。
2、模型驱动
模型驱动通过实现ModelDriven接口来接收请求参数,Action类必须实现ModelDriven接口,并且重写getModel()方法,这个方法返回的是Action所使用的数据模型对象。
首先先创建一个javaBean,其实就是跟属性驱动的域对象一样,将属性设置为private,然后加上对应的getter、setter方法。
Action类代码如下:
public class LoginAction extends ActionSupport implements ModelDriven<User>{
//封装数据
private User user = new User();
//模型驱动
@Override
public User getModel() {
return this.user;
}
}
至于属性驱动还是模型驱动的讨论,在CSDN上,有人说是属性驱动的性能比模型驱动的性能好,原文地址:点击查看 ;关于属性驱动与模型驱动的区别,原文地址:点击查看