zoukankan      html  css  js  c++  java
  • 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();
    }

  • 相关阅读:
    【 数据结构(C语言)】栈的应用——行编辑程序
    【 数据结构 (C语言)】栈的应用(二)——括号匹配问题
    节点
    页面加载--延迟加载
    雅黑php 探针
    Swiper 触屏滑动切换
    tab 选择悬停展示
    翻牌抽奖功能讲解
    公告信息滚动功能
    织梦提交表单不进行跳转
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/3992020.html
Copyright © 2011-2022 走看看