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();
}

最新文章

  1. BZOJ1856[SCOI2010]字符串
  2. NOI 09:奇数求和
  3. GDB调试基本命令
  4. [原创]可动态显示圆形图像或圆形文字的AvatarImageView
  5. 编程范式感想(一)——在C中进行对模板功能的实现
  6. DNS服务器的原理
  7. iOS_SN_UITableView的优化
  8. 解决IIS网站.woff 404 (Not Found)问题
  9. 使用websocket-sharp来创建c#版本的websocket服务
  10. lintcode.245 子树
  11. 在asp.net web api 2 使用 Serilog 记录日志
  12. javascript特效300例----抄书喽
  13. 如何高效的编写Verlog HDL——菜鸟版
  14. HBase多次加载-ROOT-和META的bug
  15. 使用sublime 正则匹配替换大批量代码
  16. keystone认证服务
  17. 如何设置Apache中的最大连接数
  18. form中的fieldset标签应用
  19. 大快DKhadoop安装教程与常见问题汇总
  20. Java Web开发基础(3)-JSTL

热门文章

  1. JavaScript判断浏览器类型及版本(新增IE11)
  2. beans.xml的用法
  3. SAP ECC6安装系列三:关于SAP,你也许想知道的一些事
  4. 时间同步linux和window
  5. Redis的字典扩容与ConcurrentHashMap的扩容策略比较
  6. cocos2dx对所有子节点设置透明度
  7. Unix系统编程()brk,sbrk
  8. hdu6153 扩展kmp求一个字符串的后缀在另一个字符串出现的次数。
  9. Android基础总结(三)SQLite,ListView,对话框
  10. ngx_lua 随笔