posts - 0,  comments - 1,  trackbacks - 0

          可以根據(jù)Action屬性的不同將它分為兩類:Field-Driven(屬性驅(qū)動(dòng)) Action和Model-Driven(模型驅(qū)動(dòng)) Action。
          一、Field-Driven(屬性驅(qū)動(dòng))Action,Action擁有自己的屬性,這些屬性一般是Java的基本類型。表單字段直接和Action的屬性 對(duì)應(yīng)。

          二、實(shí)現(xiàn)了modelDriven接口可以在action中直接獲得例如User對(duì)象,它會(huì)將Object getModel()取得的User放到ValueStack中。可以理解為將這個(gè)User的屬性追加到Action中。它主要是作用是實(shí)現(xiàn)類似 Struts的FormBean功能。

          在struts2中,提供了一種直接使用領(lǐng)域?qū)ο蟮姆绞剑褪亲宎ction實(shí)現(xiàn)com.opensymphony.xwork2.ModelDriven接口,ModelDriven讓你可以直接操作應(yīng)用程序中的領(lǐng)域?qū)ο螅试S你在web層和業(yè)務(wù)層使用相同的對(duì)象。

          ModelDriven接口只有一個(gè)方法

                  public Object getModel() {
          return null;
          }

          該方法返回一個(gè)用于接收用戶輸入數(shù)據(jù)的對(duì)象模型,在這個(gè)模型對(duì)象中的屬性可以直接通過(guò)(屬性名)userName來(lái)訪問(wèn),而不需要使用(對(duì)象名.屬 性名)user.userName這種格式來(lái)訪問(wèn)了,在action也不需要對(duì)對(duì)象提供getter和setter方法了,但是必須要在action中進(jìn) 行new操作

          如下

          // ModelDriven要使用泛型哦

          public class LoginAction extends ActionSupport implements ModelDriven<User>{

          private static final long serialVersionUID = -6434128483294080524L;

          //這里必須要new
          private User user=new User();
          public String login() throws Exception {
          // TODO Auto-generated method stub  
          return SUCCESS;
          }

          //這里是實(shí)現(xiàn)接口方法

          @Override
          public User getModel() {
          // TODO Auto-generated method stub

          //別忘記了,要把返回值寫上哦
          return user;
          }
          }

          這樣一個(gè)ModelDriven就實(shí)現(xiàn)完畢了

          和屬性驅(qū)動(dòng)的Action有很大的區(qū)別,下面一一列舉:

          (1)模型驅(qū)動(dòng)的Action必須實(shí)現(xiàn)ModelDriven接口,而且要提供相應(yīng)的泛型,這里當(dāng)然就是具體使用的Java Bean了。

          (2)實(shí)現(xiàn)ModelDriven的getModel方法,其實(shí)就是簡(jiǎn)單的返回泛型的一個(gè)對(duì)象。

          (3)在Action提供一個(gè)泛型的私有對(duì)象,這里就是定義一個(gè)User的user對(duì)象,并提供相應(yīng)的getter與setter。

          好了,上面的三件事做完之后,Action就會(huì)去自動(dòng)調(diào)用User的setter將表單中的name屬性的值賦給User中的屬性。而Action的后續(xù)處理的Jsp頁(yè)面后者是Servlet就可以使用user對(duì)象了。

          到底是用屬性驅(qū)動(dòng)和是模型驅(qū)動(dòng)呢?

          這個(gè)問(wèn)題困擾了很多Struts2的初學(xué)者,我這里提供一些建議:

          (1)請(qǐng)你統(tǒng)一整個(gè)系統(tǒng)中的Action使用的驅(qū)動(dòng)模型,即要么都是用屬性驅(qū)動(dòng),要么都是用模型驅(qū)動(dòng)。

          (2)如果你的DB中的持久層的對(duì)象與表單中的屬性都是一一對(duì)應(yīng)的話,那么就使用模型驅(qū)動(dòng)吧,畢竟看起來(lái)代碼要整潔得多。

          (3)如果表單的屬性不是一一對(duì)應(yīng)的話,那么就應(yīng)該使用屬性驅(qū)動(dòng),否則,你的系統(tǒng)就必須提供兩個(gè)Bean,一個(gè)對(duì)應(yīng)表單提交的數(shù)據(jù),另一個(gè)用與持久層。

          posted on 2011-03-21 11:45 如果你是我的傳說(shuō) 閱讀(2505) 評(píng)論(1)  編輯  收藏 所屬分類: struts2


          FeedBack:
          # re: struts2之
          2011-11-05 21:09 | yfuj

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2011年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          留言簿

          文章分類

          文章檔案

          收藏夾

          搜索

          •  

          最新評(píng)論

          主站蜘蛛池模板: 鸡东县| 江源县| 阳高县| 淳化县| 盐边县| 密山市| 奎屯市| 额济纳旗| 兴安县| 乳源| 法库县| 沈阳市| 武乡县| 乐安县| 武平县| 泗洪县| 洞头县| 石景山区| 阜城县| 文山县| 云龙县| 万年县| 兴安盟| 合阳县| 铜鼓县| 怀来县| 龙门县| 彩票| 栾川县| 永仁县| 通化市| 汝阳县| 玉田县| 遵义县| 客服| 青田县| 渝中区| 扎囊县| 治多县| 河北区| 吉林省|