Struts2学习——(五)ModelDriven使用方法及机制学习

在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口。ModelDriven让你可以直接操作应用程序中的领域对象(模型对象),允许你在Web层和业务逻辑层使用相同的对象。定义接口时,需要主要该接口时泛型定义,需要加入类名。

继承该接口,只用覆写一个方法:public T getModel()

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}
为什么要使用ModelDriven接口呢?

方法①如果直接在Action中定义属性和setter、getter方法的话,在属性很多的时候,会造成代码重复量很大,因为每写一个Action,当这个Action用到了这些类属性时,都需要去定义一遍属性和setter、getter方法。

	private String name;
	private String pass;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}
方法②将所有的类属性和setter、getter方法包装在一个类中。在Action中,定义该类的一个对象 (此时你不需要new一个对象,直接在后面写上该对象的setter、getter方法,struts2会自动装填该对象)
private User user = null;
	
	public void setUser(User user){
		this.user = user;
	}
	
	public User getUser(){
		return this.user;
	}
	
	public String execute() {

		if (user.getName().equals("wqy") && user.getPass().equals("aaa")) {
			return SUCCESS;
		} else {
			return ERROR;
		}

	}
这种方法可以减少action中的代码量,但是在JSP中装填属性则必须要采取一下格式:
		name:<input type="text" size="10" name="user.name"/><br />
		pass:<input type="password" size=10 name="user.pass"/><br /> 
		<input type="submit" value="submit~" />
这种方法会增加jsp中的代码量,不够简洁。

方法③使用ModelDriven

private User user = new User();
	
	public String execute() {

		if (user.getName().equals("wqy") && user.getPass().equals("aaa")) {
			return SUCCESS;
		} else {
			return ERROR;
		}

	}

	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}
此方法在jsp页面中表示也很简单,直接使用属性名即可。

要注意这里必须要new一个对象,否则会报空指针的错误。

ModelDrivenInterceptor是缺省的拦截器链的一部分,当一个请求经过ModelDrivenInterceptor的时候,

在这个拦截器中,会判断当前要调用的Action对象是否实现了ModelDriven接口,如果实现了这个接口,

则调用getModel()方法,并把返回值(本例是返回user对象)压入ValueStack。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值