Struts2的三种传值方式比较(附demo)

1. 属性驱动

     一般在初学struts2时,都是从属性驱动开始的。

属性驱动是指在Action类里,包含表单里对应的字段(字段名一致)和对应的setter、getter。

表单:

username: <input type="text" name="username" /><br/>
password: <input type="text" name="password" /><br/>

 对应的Action:LoginAction:

private String username;
private String password;
// getter、setter
public String execute() {
// dosomething();
}

Action页面则可以通过${username}来访问username属性。 

属性驱动对于表单域比较少的传值还好,如果表单域较多,那Action类就会包含大量的属性和getter/setter方法,就会显得臃肿。

2. 对象驱动

好象没有比较正式的名称,暂且叫对象驱动吧。

Action类里包含一个对象和getter、setter,此对象的属性与表单的域一一对应:

	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String execute() throws Exception {
             // dosomething();
	}
 表单代码:
username: <input type="text" name="user.username" /><br/>
password: <input type="text" name="user.password" /><br/>

 表单域的name由对象名和属性名组成,中间用.连接,Action对象被创建后,通过setter进行赋值。Action result页面则通过${user.username}来访问。

3. 模型驱动

模型驱动是通过实现ModelDriven<T>的getModel()接口来传值的。

Action对象里包含一个带有getter\setter的对象,和一个getModel()方法,返回类型即是表单对应的类,返回类型即是创建的对象。

public class Login3Action implements ModelDriven<User> {
	private User user = new User();
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public User getModel() {
		return user;
	}
        public String execute() {
           // ...
        }
}

表单html代码与属性驱动一样,result返回页取对象的值通过类似于${user.username}来实现。

4. 对象驱动与模型驱动的比较

在大部分情况下,使用对象驱动或模型驱动,因为能达到dto的复用,且Action类的代码也看起来比较整洁。

对象驱动优点: 无需在Action类里创建对象,支持一个表单含有多个对象的属性。

缺点: 表单域的name变长了

模型驱动优点: 使表单看起来整洁

缺点: 不支持一个Action类里多个模型驱动传值。

猜你喜欢

转载自jayung.iteye.com/blog/1881075
今日推荐