JavaWeb----学习(30)----struts2---ModelDriven 拦截器

1.如果 Action 类实现了 ModelDriven 接口,该拦截器将把 ModelDriven 接口的 getModel() 方法返回的对象置于栈顶

2.ModelDriven工作原理:

     2.1 action类实现ModelDriven接口:

public class EmpAction implements RequestAware,ModelDriven<Employee>

    2.2 浏览器发送请求,先到ModelDriven 拦截器,调用 ModelDrivenInterceptor的intercept()方法:

      

public String intercept(ActionInvocation invocation) throws Exception {
             //获取Action对象:此时为EmpAction对象,此时该 Action 已经实现了 ModelDriven 接口
		Object action = invocation.getAction();
             //判断 action 是否是 ModelDriven 的实例
		if ((action instanceof ModelDriven)) {
                        //强制转换为 ModelDriven 类型
			ModelDriven modelDriven = (ModelDriven) action;
                        //获取值栈
			ValueStack stack = invocation.getStack();
                       //调用 ModelDriven 接口的 getModel() 方法
                       //即调用 EmpAction的 getModel() 方法
			Object model = modelDriven.getModel();
			if (model != null) {
      //把 getModel() 方法的返回值压入到值栈的栈顶. 实际压入的是 EmpAction的 employee 成员变量
				stack.push(model);
			}
			if (this.refreshModelBeforeResult) {
				invocation.addPreResultListener(new RefreshModelBeforeResult(
						modelDriven, model));
			}
		}
		return invocation.invoke();
	}

2). 执行 ParametersInterceptor 的 intercept 方法: 把请求参数的值赋给栈顶对象对应的属性. 若栈顶对象没有对应的属性, 则查询


                                                                              值栈中下一个对象对应的属性...

3). 注意: getModel 方法不能提供以下实现. 的确会返回一个 Employee 对象到值栈的栈顶. 但当前 Action
的 employee 成员变量却是 null.

             

public Employee getModel() {
    return new Employee();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值