SSH框架之Struts的常用技術——模型驅動(ModelDriven)

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”/>輸出結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章