• struts2ModelDriven模型驱动


    把动作和模型隔开

      在使用 Struts 作为前端的企业级应用程序时把动作和模型清晰地隔离开是有必要的: 有些动作类不代表任何模型对象, 它们的功能仅限于提供图文显示服务

    ModelDriven 拦截器

    情景: 有一个用来处理客户的 CustomerAction 类, 该动作类实现了 ModelDriven 接口.
    当用户触发CustomerAction 动作时, ModelDriven 拦截器将调用相关CustomerAction 对象的 getModel() 方法, 并把返回的模型(Customer实例)压入到 ValueStack 栈. 接下来 Parameters 拦截器将把表单字段映射到 ValueStack 栈的栈顶对象的各个属性中. 因为此时 ValueStack 栈的栈顶元素是刚被压入的模型(Product)对象, 所以该模型将被填充. 如果某个字段在模型里没有匹配的属性, Param 拦截器将尝试 ValueStack 栈中的下一个对象.
    一个模型类必须有一个不带任何参数的构造器.

      模型驱动的目的是将对象放入到值栈顶,由struts2中的模型驱动拦截器处理

    1 public class UserAction extends ActionSupport implements ModelDriven<CustomAction> {
    2     
    3     public CustomAction getModel() {
    4         return user;
    5     }
    6 }

    底层代码:<interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>  

    struts2标签自动回显

      方法一:

     1 public String edit(){
     2     //该对象是从数据库查询出来的
     3     CustomAction newUser = new CustomAction();
     4     newUser.setUsername("zhang");
     5     newUser.setTel("13600000000");
     6     newUser.setDes("xxxxx");
     7 }
     8 方法一:
     9     user.setUsername(newUser.getUsername());
    10     user.setTel(newUser.getTel());
    11     user.setDes(newUser.getDes());
    12 }
    13 方法二:
    14     //获取栈
    15     ValueStack valueStack = ServletActionContext.getContext().getValueStack();
    16     //删除栈顶的user对象
    17     valueStack.pop();
    18     //增加新的对象到栈顶newUser
    19     valueStack.push(newUser);
    20 }

    -方式二原理

     

  • 相关阅读:
    mysql缓存
    复杂映射
    SQL 映射的 XML 文件
    xml配置文件
    从xml中构建sqlSessionFactory
    eclipse使用时jar不在libraries
    去掉不用的工作空间
    javac找不到或无法加载主类 com.sun.tools.javac.Main,
    文本,布局,样式
    (常用)re模块
  • 原文地址:https://www.cnblogs.com/hacket/p/3093318.html
Copyright © 2020-2023  润新知