您的位置:首页 > 编程语言 > Java开发

Struts2的模型驱动(ModelDriven)

2017-04-20 09:40 423 查看
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”/>输出结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息