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

    -方式二原理

     

  • 相关阅读:
    递归
    高等数学思维导图——1.函数与极限
    sort方法和自定义比较器的写法
    PriorityQueue(优先队列)
    常用JAVA API :HashSet 和 TreeSet
    常用Java API:HashMap 和 TreeMap
    ArrayList、Vector和LinkedList的区别
    构造方法
    面向对象特点:封装、继承、多态
    匿名对象
  • 原文地址:https://www.cnblogs.com/hacket/p/3093318.html
Copyright © 2011-2022 走看看