1. 程式人生 > >【SSH學習】--Structs2模型驅動與屬性驅動

【SSH學習】--Structs2模型驅動與屬性驅動

兩種方式

When:當你從jsp介面調到action時,

屬性驅動

屬性驅動需要你在action中定義屬性,這些屬性就是jsp表單屬性,當你從jsp介面跳到action,struts的攔截器就會呼叫你的action的setxx方法,將你表單的屬性注入action中對應的屬性,好了,那麼問題來了,假設你的表單有10000個屬性,那麼你就需要在action中定義10000個屬性。。。。。然後你的service方法需要傳入一個物件,那麼你需要將這10000個屬性封裝成一個物件,然後傳給service方法,模型驅動只需要定義一個物件就可以。

模型驅動

模型驅動會將jsp介面上的表單屬性自動封裝成一個javaBean物件,因為大多時候service方法引數是這個指定物件,你拿到這個javaBean物件直接作為引數,通過service訪問dao層方法(比如增刪改查);

優缺點對比

模型驅動的優點:

action類中會比較簡潔,利於傳參;缺點:在jsp介面定義表單屬性name時需要xxx.id這種格式定義表單nama屬性。

屬性驅動的優點:

當你要的引數不多,而且這些引數不是不需要封裝成一個類,用屬性驅動會比較好

模型驅動實現方式

(1)模型驅動的Action必須實現ModelDriven介面,而且要提供相應的泛型,這裡當然就是具體使用的Java Bean了。
(2)實現ModelDriven的getModel方法,其實就是簡單的返回泛型的一個物件。
(3)在Action提供一個泛型的私有物件,這裡假如定義一個User的user物件,並提供相應的getter與setter。
好了,上面的三件事做完之後,Action就會去自動呼叫User的setter將表單中的name屬性的值賦給User中的屬性。而Action的後續處理的Jsp頁面後者是Servlet就可以使用user物件了。

如何選擇?一些建議:

(1)請你統一整個系統中的Action使用的驅動模型,即要麼都是用屬性驅動,要麼都是用模型驅動。
(2)如果你的DB中的持久層的物件與表單中的屬性都是一一對應的話,那麼就使用模型驅動吧,畢竟看起來程式碼要整潔得多。
(3)如果表單的屬性不是一一對應的話,那麼就應該使用屬性驅動,否則,你的系統就必須提供兩個Bean,一個對應表單提交的資料,另一個用與持久層。