23(续)Struts2_CRUD总结上-(ModelDriven拦截器 paramter 拦截器)
来源:互联网 发布:大数据搜索技术 编辑:程序博客网 时间:2024/06/04 19:53
1.代码结构
2.代码
代码参考21.Struts2_CRUD操作(1)查询和删除
3.Struts2 运行流程图-1
4.Params 拦截器:
Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueStack 栈中的下一个对象
5.ModelDriven拦截器
1)当用户触发 add 请求时, ModelDriven 拦截器将调用 EmployeeAction 对象的 getModel() 方法, 并把返回的模型(Employee实例)压入到 ValueStack 栈.
2)接下来 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 因为此时 ValueStack 栈的栈顶元素是刚被压入的模型(Employee)对象, 所以该模型将被填充. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueStack 栈中的下一个对象
Action 实现ModelDriven 接口后的运行流程
1 @Override 2 public String intercept(ActionInvocation invocation) throws Exception { 3 4 //获取Action 对象:EmployeeAction对象,此时该Action 已经实现了ModelDriven 接口 5 //public class EmployeeAction implements RequestAware ,ModelDriven<EmployeeBean> 6 Object action = invocation.getAction(); 7 //判断:action是否是ModelDriven 的实例 8 if (action instanceof ModelDriven) { 9 //强制转换 ModelDriven 类型10 ModelDriven modelDriven = (ModelDriven) action;11 //获取值栈12 ValueStack stack = invocation.getStack();13 //调用 ModelDriven 接口的getModel()方法14 //即 调用 EmployeeAction 的 getModel()方法15 /*16 * @Override17 public EmployeeBean getModel() {18 employeeBean = new EmployeeBean();19 return employeeBean;20 }21 22 */23 24 Object model = modelDriven.getModel();25 if (model != null) {26 //把getModel 的返回值压入到值栈的栈顶:实际压入的是employeeAction 的成员变量,employeeBean27 stack.push(model);28 }29 if (refreshModelBeforeResult) {30 invocation.addPreResultListener(new RefreshModelBeforeResult(modelDriven, model));31 }32 }33 return invocation.invoke();34 }35 36 37 //执行:PramaterInterception 的intercept() 方法:把请求的参数的值赋给栈顶对象,对应的属性,38 //若栈顶对象没有对应的属性,则查询值栈中的下一个对象,直到找到此属性,赋值。
注意:getModel()方法不能如下实现
因为 可以将此对象压入值栈的栈顶;但是当前的Action 成员变量是 null;
public EmployeeBean getModel() {
return new Employee();
}
实现modelDriven 接口
public class EmployeeAction implements RequestAware ,ModelDriven
图示说明:
原文地址:http://www.cnblogs.com/jasonHome/p/5913927.html
阅读全文
0 0
- 23(续)Struts2_CRUD总结上-(ModelDriven拦截器 paramter 拦截器)
- 24(续)Struts2_CRUD总结下(paramsPrepareParamsStack 拦截器)
- ModelDriven拦截器
- Struts-ModelDriven拦截器
- ModelDriven拦截器的用法
- 25.Struts2_CRUD操作(3)使用拦截器之后的效果
- 《深入浅出struts2》--第十章 ModelDriven拦截器
- modeldriven,prepare拦截器和paramsPrepareParamsStack栈
- Struts2-9 modelDriven与paramsPrepareParams拦截器
- ModelDriven,prepare拦截器和paramsPrepareParamsStack栈
- [Struts2] ModelDriven和Preparable拦截器
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- struts2的整体回顾(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
- Struts2拦截器(Interceptor)(上)
- struts2的拦截器(上)
- Interceptor登录拦截(Spring拦截器)
- Struts2 学习系列 (5) ModelDriven 和 Preparable 拦截器
- 泛型
- 基本数据类型对象包装类
- 题目:设计一个洗牌发牌的程序
- Postfix中如何删除邮件队列[mailq]中的邮件
- MYSQL数据库设计规范
- 23(续)Struts2_CRUD总结上-(ModelDriven拦截器 paramter 拦截器)
- 面向对象(一)
- h5新标签video详解
- javascript之创建对象的多种方式以及优缺点
- 正则表达式获取url中的参数
- 遇到特殊的设计问题时,有一条原则帮了我
- 《Visual C++ 2010入门经典》(第五版)-第五章 程序结构1 5.3函数中的静态变量
- Python中的装饰器(decorator)
- Summary of D-SLATS