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

  • 相关阅读:
    git本地分支管理
    SpringMVC的第一个入门案例
    原来热加载如此简单,手动写一个 Java 热加载吧
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    SpringBoot 开发案例之参数传递的正确姿势
    MENU Java 中的 final、finally、finalize 有什么不同?
    Java Web 学习(1) —— Servlet
    Spring 基础知识学习
    SpringBoot中如何灵活的实现接口数据的加解密功能?
    Java中常用的四种线程池
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/3992020.html
Copyright © 2011-2022 走看看