1. Action 实现 ModelDriven 接口后的运行流程
1). 先会执行 ModelDrivenInterceptor 的 intercept 方法.
public String intercept(ActionInvocation invocation) throws Exception {
//获取 Action 对象: EmployeeAction 对象, 此时该 Action 已经实现了 ModelDriven 接口
//public class EmployeeAction implements RequestAware, ModelDriven<Employee>---这里就是我Action类实现的ModelDriven接口
Object action = invocation.getAction();
//判断 action 是否是 ModelDriven 的实例
if (action instanceof ModelDriven) {
//强制转换为 ModelDriven 类型
ModelDriven modelDriven = (ModelDriven) action;
//获取值栈
ValueStack stack = invocation.getStack();
//调用 ModelDriven 接口的 getModel() 方法
//即调用 EmployeeAction 的 getModel() 方法
/*自己在Action类中实现ModelDriven接口时重写了getModel()方法
public Employee getModel() {
employee = new Employee();
return employee;
}
*/
//实际就是为了获取到我们返回的对象
Object model = modelDriven.getModel();
if (model != null) {
//把 getModel() 方法的返回值(也就是我想压入栈顶的对象)压入到值栈的栈顶. 实际压入的是 EmployeeAction 的 employee 成员变量
stack.push(model);
}
if (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();
}
最新文章
- BZOJ1856[SCOI2010]字符串
- NOI 09:奇数求和
- GDB调试基本命令
- [原创]可动态显示圆形图像或圆形文字的AvatarImageView
- 编程范式感想(一)——在C中进行对模板功能的实现
- DNS服务器的原理
- iOS_SN_UITableView的优化
- 解决IIS网站.woff 404 (Not Found)问题
- 使用websocket-sharp来创建c#版本的websocket服务
- lintcode.245 子树
- 在asp.net web api 2 使用 Serilog 记录日志
- javascript特效300例----抄书喽
- 如何高效的编写Verlog HDL——菜鸟版
- HBase多次加载-ROOT-和META的bug
- 使用sublime 正则匹配替换大批量代码
- keystone认证服务
- 如何设置Apache中的最大连接数
- form中的fieldset标签应用
- 大快DKhadoop安装教程与常见问题汇总
- Java Web开发基础(3)-JSTL