piliskys

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            25 隨筆 :: 0 文章 :: 40 評(píng)論 :: 0 Trackbacks
          用過struts都清楚,struts的開發(fā)一般要寫兩個(gè)類,F(xiàn)ormBean和Action類,通常情況下Action是這樣的:
          public???class?XXXAction??extends?Action?{
          ????
          public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,
          ?????????????????????????????????HttpServletRequest?request,?HttpServletResponse?response)?
          throws?Exception?{
          ????????XXXXForm?theform?
          =(XXXXForm)?form;//form的強(qiáng)制轉(zhuǎn)型
          ????????
          //這里就是你要處理的業(yè)務(wù)邏輯了?
          ????????return?mapping.findForward("XXXX");
          ????}
          這是一個(gè)Action最少的代碼了,它沒有處理任何邏輯,只是一個(gè)跳轉(zhuǎn),F(xiàn)ormBean的話,只要繼承ActionForm,代碼到?jīng)]有規(guī)定,到時(shí),我們可能會(huì)想,每個(gè)Action里面都必須寫上面那些代碼,煩啊,還有在每個(gè)FormBean里我們一般都會(huì)定義一些常用的屬性,如event,根據(jù)event的值,我們來決定一些邏輯的處理及頁面的跳轉(zhuǎn),每次要寫,也煩啊。
          ?? 好,煩的話,那我們要開始做點(diǎn)事情了,首先,寫一個(gè)formBean代碼如下:
          public?class?XXXForm?extends??ActionForm{
          ????
          private?String?event;//事件名
          ????public?String?getEvent()?{
          ????????
          return?event;
          ????}

          ????
          public?void?setEvent(String?event)?{
          ????????
          this.event?=?event;
          ????}

          }
          我想這誰都應(yīng)該清楚,然后我們?cè)賹慺rombean時(shí),就不要extends? ActionForm,而是extends? XXXForm了,這樣,我們省了些代碼,我們?cè)賮砜碅ction,也這樣試試:
          public?abstract?class?XXXAction??extends?Action?{
          ????
          public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,
          ?????????????????????????????HttpServletRequest?request,?HttpServletResponse?response)?
          throws?Exception?{
          ????????XXXForm?theform?
          =(XXXForm)?form;
          ????????
          return?mapping.findForward(doAction(theform));
          ????}

          ?????
          /**
          ??????*?處理一些業(yè)務(wù)
          ??????*?
          @param?form
          ??????*?
          @return????返回mapping指向的字符串
          ??????
          */

          ???
          public?abstract??String?doAction(BaseForm?form);//抽象
          }
          這樣的話,我們?cè)賹慉ction類時(shí),就不extends Action而是extends XXXAction,代碼就像:
          public?class?***Action?extends?XXXAction?{
          ????
          public?String?doAction(XXXForm?form)?{
          ????????
          ***Form?theform?=?(***Form)?form;//強(qiáng)制轉(zhuǎn)成你真正的formbean
          ?????
          //這里就是你要處理的業(yè)務(wù)邏輯了???
          ?????return?"success";
          ????}

          }

          就是以上一些代碼,簡單多了吧,return一個(gè)字符串就行了,感覺還有點(diǎn)像webwork了,到此完了嗎,有沒

          有什么還沒有做呢,對(duì)了,這樣的話,我們定義的Action都成無會(huì)話的bean了,所以request是要得到的

          ,很多情況下的url是***action.do?id=cctv,而且一般是系統(tǒng)都是把用戶的信息放入session中的,所以

          request是強(qiáng)烈要求要還給我們的,好,那我們來重構(gòu)下formbean和action吧,以下我們用BaseForm,及

          BaseAction來定義,兩個(gè)類都放在同一個(gè)包中

          public?class?BaseForm?extends??ActionForm{
          ????
          private?String?event;
          ????
          private?HttpServletRequest?request;
          ????
          /**
          ??????*?注:這個(gè)是得到用戶信息,這個(gè)只是一個(gè)例子,也可不實(shí)現(xiàn),由request得到session,再得到

          user,
          ??????*?但reguser字符串對(duì)一般開發(fā)人員可能是不可見的
          ??????
          */

          ????
          public?User?getUser()?{
          ????????
          return???(User)?getRequest().getSession().getAttribute("reguser");
          ????}

          ????
          public?HttpServletRequest?getRequest()?{
          ????????
          return?request;
          ????}

          ????
          /**
          ??????*?注:這里用的protected,這樣可以就同一包的類可調(diào)用,其它類是不可見的
          ??????
          */

          ????
          protected?void?setRequest(HttpServletRequest?request)?{
          ????????
          this.request?=?request;
          ????}

          ????
          public?String?getEvent()?{
          ????????
          return?event;
          ????}

          ????
          public?void?setEvent(String?event)?{
          ????????
          this.event?=?event;
          ????}

          }
          BaseAction代碼:
          public?abstract?class?BaseAction??extends?Action?{
          ????
          public?ActionForward?execute(ActionMapping?mapping,?ActionForm?form,
          ?????????????????????????????????HttpServletRequest?request,?HttpServletResponse?response)?

          throws?Exception?{
          ????????BaseForm?theform?
          =(BaseForm)?form;
          ????????theform.setRequest(request);
          //加了這句
          ????????return?mapping.findForward(doAction(theform));
          ????}

          ?????
          /**
          ??????*?處理一些業(yè)務(wù)
          ??????*?
          @param?form
          ??????*?
          @return????返回mapping指向的字符串
          ??????
          */

          ???
          public?abstract??String?doAction(BaseForm?form);
          }

          到此算為結(jié)束,可能有為會(huì)問,那還有response呢,response的話,一般出現(xiàn)在內(nèi)部跳轉(zhuǎn)等情況,感覺用

          的比較少,所以在此就不把它給大家了,如覺得一定要得到的話,那就跟request一樣進(jìn)行設(shè)置吧,不過

          萬事都應(yīng)該有個(gè)度,自己衡量。

          posted on 2006-04-18 09:10 霹靂火 閱讀(2687) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: struts的輕量架構(gòu)(新手有用) 2006-05-05 12:18 綠色使者、綠色心情
          如果要用一個(gè)action執(zhí)行多個(gè)方法,其實(shí)完全可以用DispatchAction或者LookupDispathAction,你這樣的封裝,我覺得實(shí)際好像作用不大,不過倒是可以跟著這個(gè)思路下去,實(shí)現(xiàn)一些復(fù)雜的通用控制  回復(fù)  更多評(píng)論
            


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 青州市| 正蓝旗| 泉州市| 万荣县| 营山县| 苏尼特左旗| 旬邑县| 祁东县| 日土县| 会昌县| 宁陵县| 鹿泉市| 台南市| 松潘县| 柘城县| 星座| 曲靖市| 罗山县| 门头沟区| 贞丰县| 景宁| 井冈山市| 湾仔区| 广昌县| 余庆县| 门源| 安徽省| 兴业县| 大宁县| 义乌市| 商洛市| 榕江县| 庆阳市| 镇巴县| 军事| 徐闻县| 比如县| 肥东县| 饶阳县| 陆良县| 石首市|