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

  • 相关阅读:
    DeepFM
    Wide & Deep Learning Model
    机器学习优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)
    svm、logistic regression对比
    梯度下降和EM算法,kmeans的em推导
    牛顿法、拟牛顿法以及与梯度下降法的对比
    【effective c++】构造/析构/赋值运算
    Tips/Tricks in Deep Neural Networks
    GoogLeNet系列解读
    电脑组装的配件及其功能
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/3992020.html
Copyright © 2011-2022 走看看