1. 程式人生 > >Struts2的模型驅動(ModelDriven)

Struts2的模型驅動(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”/>輸出結果。

相關推薦

Struts2模型驅動(ModelDriven)

1.  模型驅動:           模型驅動是使用javaBean物件來封裝請求引數,在整個MVC流程中可以直接使用這個物件。在傳送請求後Struts將各個請求引數(javab的屬性)封裝到一個JavaBean物件中,Action接收這個例項物件並用該物件進行相關處理返回處理結果。          

【SSH快速進階】——struts2模型驅動ModelDriven

上篇部落格《SSH快速進階——struts2簡單的例項》中,處理使用者登陸的action—LoginAction為: package com.danny.user.action; public cl

struts2 模型驅動

rate 方法 mit java todo ret auto post string 在servlet中獲取頁面傳遞過來的數據的方式是:request.getParameter(“username”);這個代碼可以獲取到頁面的username的數據。在action中可以通過

Struts2模型驅動將實體類物件自動壓入值棧棧頂的問題

struts2中action自動將模型(實體類物件)放入值棧棧頂,棧頂的實體類例項的各個屬性(除了從頁面通過模型驅動進來的屬性)總是null,通過不斷的撓頭和查閱才發現模型驅動的ModelDriven介面的 getModel()返回的物件指向的是例項是最初new出的物件的地址,如果在acti

Struts2模型驅動原理

談到模型驅動之前,先了解一下屬性驅動,屬性驅動和模型都是用來解決表單值和類中的屬性值對應傳遞的。 一、屬性驅動 a)  原理:主要靠的就是ParameterInterceptor攔截器來實現表單值和action中對應屬性的值傳遞,valueStack.setValue()

Struts2——模型驅動

模型驅動攔截器: Struts執行時候,會執行預設的攔截器棧,其中有一個攔截器,模型驅動攔截器: <interceptor name="modelDriven" class="com

Strust2 --- 根據泛型封裝Action的模型驅動ModelDriven獲取model物件

public class BaseAction<T> extends ActionSupport implements ModelDriven<T> { //模型驅動

關於Struts2模型驅動封裝的細節

突然想到一個問題,當模型驅動封裝封裝了一次之後,也就是物件中被賦予了值,再次封裝較少的屬性,其它未封裝的資料還存在嗎? 通過輸出語句實驗,資料仍然還在物件中,所以,這裡的物件只是一個容器的作用,而且,屬性的封裝很有可能還是通過getParameter這種方式,配合反射機制來

Struts2模型驅動封裝

平常寫一下小東西,用到模型驅動封裝,簡直方便的不要不要的。 action頁面  package Action; import entity.Product; import com.opensymphony.xwork2.ActionSupport; import

Struts2模型驅動亂碼處理

 在get傳參的時候遇到了struts2模型驅動的中文亂碼問題,各種寫filter過濾,都沒有成功,最後在網上查到 只需要在tomcat的server.xml配置中修改<Connector connectionTimeout="20000" port="8088" p

[java]struts2 模型驅動

   一開始敲網上商城的時候,對於資料的傳遞方式我是很驚豔了一把的,感覺特別高大上,就感覺,竟然不用像.net一樣取誰的值,給誰賦值這樣,只要需要用的時候,簡單的get一下就ok了,簡直高大上啊。

struts2模型驅動屬性名要和頁面一致

JSP程式碼<input type="text" name="shopId">javabean程式碼 private Integer shopID; 結果使用模型驅動時報錯 Unexpected Exception caught setting 'shopId'

struts2(二)---ModelDriven模型驅動

這篇文章用來寫一下struts中的模型驅動機制modelDriven 1.為什麼要用modelDriven struts中Action 用來處理業務邏輯,如果向上一篇文章中的做法,把實體類的屬性及get set方法都寫在action中,會是程式碼比較混

Struts2 ModelDriven(模型驅動)注意事項

以下僅作為個人筆記記錄,如有不當,多謝指出 首先,Action必須實現ModelDriven介面,可在implements ModelDriven<T> T中指定泛型,即你需要用到的Model類,如:要登入,從登入頁面提交上來userName和password,

struts2獲取表單數據之 屬性封裝 模型驅動 表達式封裝 對象封裝到list集合 對象封裝到map集合 五種方便的封裝方式

demo1 submit namespace auto nbsp return admin user pri 一、屬性封裝   屬性封裝是在action裏面設定屬性值,屬性名字一定要和表單中的name一樣,action中extends ActionSupport   dem

struts2屬性驅動模型

bsp 表單提交 man let 用戶 啟動服務 equal tex 屬性 屬性驅動模型的作用: 因為struts2與servlet API 實現了解耦,無法直接使用HttpServlet Request對象獲取表單提交的參數,但Struts2提供了屬性驅動模型機制來解決這

第06講 struts2的設定資料-模型驅動

1,在 HeadFirstStruts2chapter02 中,新建類UserAction3,實現ModelDriven。ModelDriven的缺點是隻能載入一個bean。 import com.cruise.model.User; import com.cruise.service.UserSe

struts2[2.3]引數獲得方式-(3)模型驅動獲得引數

1.學習路線 今天咱們來學struts2引數獲得方式,let`go!                   

Struts2模型驅動方式封裝資料

主要解決的問題:是在action中如果獲取請求引數 主要有兩種方式: 屬性驅動 直接在action類中提供與請求引數匹配屬性,提供get/set方法 在action類中創始一個javaBean,對其提供get/set ,在請求時頁面上要進行修改        

struts2的屬性驅動模型驅動

.Struts2的屬性驅動. Struts2的屬性驅動指的是在action中JSP頁面的每一個form中的name都對應在action中有一個屬性與之對應。   Struts2的模型驅動 Struts2的模型驅動其實和Struts1.x中的ActionForm有點類似,