• struts2.0 属性驱动与模型驱动


    1.  模型驱动: 
             模型驱动是使用javaBean对象来封装请求参数,在整个MVC流程中可以直接使用这个对象。在发送请求后Struts将各个请求参数(javab的属性)封装到一个JavaBean对象中,Action接收这个实例对象并用该对象进行相关处理返回处理结果。 
             模型驱动的Action中定义javaBean并实例化,并且需要提供该JavaBean的getter和setter方法。Action需要实现ModelDriven接口。

    2.  Struts2模型驱动实现方式: 
           那么Struts2是如何将请求参数封装到model中的呢?我们可以解读一下struts-default.xml配置文件,在struts-default.xml中有如下配置:

    <interceptors>
           ……
           <!--定义属性驱动的拦截器—>
           <interceptor name=”params” class=”com.opensymphony.xwork2.interceptor.ParametersInterceptor” />
           <!--定义模型驱动的拦截器—>
    <interceptor name=”model-driven”  class=”com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor” />
           ……
           <!--定义模型驱动的拦截器栈—>
           <interceptor-stack name=”modelDrivenStack”>
                  <interceptor-ref name=”model-driven”/>
                  <interceptor-ref name=”basicStack”/>
           </interceptor-stack>
    ……
           <interceptor-stack name=”defaultStack”>
                  <interceptor-ref name=”model-driven”/>
                  <interceptor-ref name=”params”/>
           </interceptor-stack>
    </interceptors>
    <!--定义Struts2默认的拦截器栈—>
    <default-interceptor-ref name=”defaultStack” />

    其中params拦截器负责提取请求的参数,如果是使用的属性驱动模式,它还负责将请求参数传给Action实例的属性;而model-driven拦截器则负责把请求参数传给模型的属性。

    3. 下面给出一个使用模型驱动的示例程序:

    JavaBean类:

    public class TestBean { 

        private int id;
        private String name;
        public TestBean(){};
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    Action:

    import com.core.bean.TestBean;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven; 

    public class TestAction extends ActionSupport implements ModelDriven<TestBean> { 

        private TestBean testBean=new TestBean(); 

        public TestBean getTestBean() {
            return testBean;
        } 

        public void setTestBean(TestBean testBean) {
            this.testBean = testBean;
        } 

        @Override
        public String execute() throws Exception {
            return this.INPUT;
        } 

        public TestBean getModel() {
            return testBean;
        }
    }

    采用模型驱动模式后,所有的处理结果都封装在Model中,如果想要在JSP页面上输出属性结果,可以使用<s:property value=”testBean.name”/>或<s:property value=”name”/>输出结果。

  • 相关阅读:
    kicad 基本操作
    RedHat centos中的上传下推脚本
    使用Node.js爬虫存储MySQL数据库
    解决vue和vue-template-compiler版本不同报错的问题
    Vue组件通信(父子组件通信)-学习笔记
    git 简单操作
    错误解决:redis.exceptions.ResponseError: unknown command 'SENTINEL'
    nginx做泛域名解析的域名的正则判断
    postman对字符串进行base64编码方法和变量的使用
    pymysql报错OperationalError: (2013, 'Lost connection to MySQL server during query')
  • 原文地址:https://www.cnblogs.com/yimian/p/8005059.html
Copyright © 2020-2023  润新知