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 }

    -方式二原理

     

  • 相关阅读:
    Proximal Gradient Descent for L1 Regularization
    使用Spring Security3的四种方法概述
    理解spring对事务的处理:传播性
    MySQL事务隔离级别详解
    Spring 使用注解方式进行事务管理
    Redis的高级应用-安全性和主从复制
    Redis的高级应用-事务处理、持久化、发布与订阅消息、虚拟内存使用
    mysql 语句优化心得
    Maven搭建Spring Security3.2项目详解
    Java网络编程之TCP、UDP
  • 原文地址:https://www.cnblogs.com/hacket/p/3093318.html
Copyright © 2011-2022 走看看