隨筆 - 1  文章 - 1  trackbacks - 0
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆檔案

          收藏夾

          搜索

          •  

          最新評論

           

          下面是Struts中的一些常用Action如DispatchAction/LookupDispatchAction/MappingDispatchAction/ForwardAction/IncludeAction的總結(jié)



          1 .DispatchAction extends BaseAction

          一般的Action如,在這里UserAction只需要繼承父類(extends Action類),然后重寫父類的execute方法,在execute中實現(xiàn)具體的控制轉(zhuǎn)向。

          對于同一個formbean上進(jìn)行的新增、修改、刪除等,我們需要分發(fā)不同的Action,這里有兩種做法。

          ① 一種是通過在execute方法中if判斷進(jìn)行不同的轉(zhuǎn)向:

          ㈠ UserAction 類的execute方法中

          String method = request.getParameter("method");

          if (method.equals("create")) {

          ……

          return mapping.findForward("createUser");

          }

          if (method.equals("save")) {

          ……

          return mapping.findForward("saveUser");

          }



          ㈡ struts-config.xml 中:


          name="userForm"

          scope="request">






          name="userForm"

          scope="request">







          ㈢ 可以在頁面中定義一個隱藏變量來指明相應(yīng)的操作

          // 這里最好不要使用

          // 因為這種寫法需要在formbean中定義相應(yīng)的property,我們可以采用普通隱藏域



          然后定義一個javascript函數(shù),我們可以在通過點擊提交按鈕的時候,在函數(shù)中修改它的值。



          點擊提交按鈕時,通過set方法設(shè)置提交的method屬性值:

          CREATE

          SAVE





          ② 第二就是使UserAction繼承DispatchAction,不需要重寫execute方法:

          public ActionForward create(ActionMapping mapping,

          ActionForm form,

          HttpServletRequest request,

          HttpServletResponse response)

          throws Exception {

          // 進(jìn)行一些create的邏輯

          // ……

          return mapping.findForward("createUser");

          }

          public ActionForward save(ActionMapping mapping,

          ActionForm form,

          HttpServletRequest request,

          HttpServletResponse response)

          throws Exception {

          // 進(jìn)行一些save的邏輯

          // ……

          return mapping.findForward("saveUser");

          }



          ㈡ DispatchAction 在配置上和一般Action稍有不同,就是要在Action配置中多一個parametr屬性,這個屬性可以指定執(zhí)行DispatchAction中對應(yīng)的方法。

          struts-config.xml 中:


          name="userForm"

          scope="request"

          parameter="method">









          ㈢ 我們在這里指定了parameter的值為method,則頁面提交時我們必須指定提交時action的method參數(shù)來確定去我們想要調(diào)用哪個Action方法。



          點擊提交按鈕時,通過submitForm方法設(shè)置提交時action的method參數(shù):



          CREATE

          SAVE





          2 . LookupDispatchAction extends DispatchAction

          LookupDispatchAction 繼承DispatchAction, 在上面的 ② ㈢ 中對于同一個頁面上的多個submit按鈕,不需要那么多復(fù)雜的js函數(shù)來指定提交時action的method參數(shù),即上面的submitForm(operation)方法可以省去,LookupDispatchAction其用法為:

          ① 用MessageResource將按鈕的文本和ResKey相關(guān)聯(lián),例如button.save=保存; ② ㈢ 中用LookupDispatchAction代替就是:



















          ② 在Action配置中多一個parametr屬性,屬性值與submit按鈕的property屬性值相同,這個屬性可以指定執(zhí)行LookupDispatchAction中對應(yīng)的方法。

          struts-config.xml 中:


          name="userForm"

          scope="request"

          parameter=" method ">











          使UserAction繼承LookupDispatchAction,重寫getKeyMethodMap()方法, 將ResKey和MethodName對應(yīng)起來, 如下:
          protected Map getKeyMethodMap() {

          Map map = new HashMap();

          map.put("button.create", "create");

          map.put("button.save", "save");

          return map;

          }



          注: DispatchAction 類使用請求參數(shù)的值確定調(diào)用哪種方法,而LookupDispatchAction類利用請求參數(shù)值,反向查詢資源綁定,并將它與類中的一種方法匹配,實際上這兩種方法有異曲同工之處。



          3 . MappingDispatchAction extends DispatchAction

          DispatchAction 指定了parameter的值為method,則頁面提交時我們必須指定提交時action的method參數(shù)來確定去我們想要調(diào)用哪個Action方法,而MappingDispatchAction直接通過struts-config.xml將多個action-mapping映射到同一個Action類的不同方法:


          name="userForm"

          scope="request"

          parameter="create">






          name="userForm"

          scope="request"

          parameter="save">







          然后UserAction繼承MappingDispatchAction即可:

          public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception

          public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception



          注: 查看MappingDispatchAction的源碼:

          protected String getMethodName(ActionMapping mapping, ActionForm form,

          HttpServletRequest request, HttpServletResponse response,

          String parameter) throws Exception {

          // Return the unresolved mapping parameter.

          return parameter;

          }

          可以看到它調(diào)用的方法是直接返回struts-config.xml中parameter的值。



          4 . ForwardAction extends BaseAction

          相當(dāng)于功能,不需要配置formbean和action,可以直接進(jìn)行跳轉(zhuǎn),只需要在struts-config.xml中配置:


          type="org.apache.struts.actions.ForwardAction"

          scope="request"

          parameter="/pages/listUser.jsp">



          parameter 屬性用于指定forward到哪個頁面,path、type、parameter三個屬性為必須,其他可省略。



          5 . IncludeAction extends BaseAction

          相當(dāng)于功能,需要在struts-config.xml中配置:


          name="userForm"

          scope="request"

          parameter="/pages/includepage.jsp">




          posted on 2008-05-02 22:15 飛陽跋色 閱讀(219) 評論(1)  編輯  收藏

          FeedBack:
          # re: Struts 學(xué)習(xí)筆記之Action[未登錄] 2008-05-03 20:17 jimmy
          中間有很多空的地方,怎么看不明白呀,是圖沒發(fā)上來,還是?  回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 西和县| 台湾省| 稷山县| 新巴尔虎左旗| 澜沧| 封丘县| 永定县| 泾源县| 阳西县| 内丘县| 鄂州市| 黔西县| 玛纳斯县| 临江市| 常德市| 米林县| 工布江达县| 福建省| 定襄县| 澳门| 东方市| 图木舒克市| 灵台县| 千阳县| 饶平县| 正镶白旗| 濉溪县| 晋中市| 綦江县| 会昌县| 雅江县| 盐城市| 大足县| 商洛市| 鹿邑县| 洛扎县| 芮城县| 东宁县| 朝阳市| 扶沟县| 姜堰市|