<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    piliskys

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      25 隨筆 :: 0 文章 :: 40 評(píng)論 :: 0 Trackbacks
    用過(guò)struts都清楚,struts的開(kāi)發(fā)一般要寫(xiě)兩個(gè)類(lèi),F(xiàn)ormBean和Action類(lèi),通常情況下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最少的代碼了,它沒(méi)有處理任何邏輯,只是一個(gè)跳轉(zhuǎn),F(xiàn)ormBean的話(huà),只要繼承ActionForm,代碼到?jīng)]有規(guī)定,到時(shí),我們可能會(huì)想,每個(gè)Action里面都必須寫(xiě)上面那些代碼,煩啊,還有在每個(gè)FormBean里我們一般都會(huì)定義一些常用的屬性,如event,根據(jù)event的值,我們來(lái)決定一些邏輯的處理及頁(yè)面的跳轉(zhuǎn),每次要寫(xiě),也煩啊。
    ?? 好,煩的話(huà),那我們要開(kāi)始做點(diǎn)事情了,首先,寫(xiě)一個(gè)formBean代碼如下:
    public?class?XXXForm?extends??ActionForm{
    ????
    private?String?event;//事件名
    ????public?String?getEvent()?{
    ????????
    return?event;
    ????}

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

    }
    我想這誰(shuí)都應(yīng)該清楚,然后我們?cè)賹?xiě)frombean時(shí),就不要extends? ActionForm,而是extends? XXXForm了,這樣,我們省了些代碼,我們?cè)賮?lái)看Action,也這樣試試:
    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);//抽象
    }
    這樣的話(huà),我們?cè)賹?xiě)Action類(lèi)時(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";
    ????}

    }

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

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

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

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

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

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

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

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

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

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

    ????
    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ì)問(wèn),那還有response呢,response的話(huà),一般出現(xiàn)在內(nèi)部跳轉(zhuǎn)等情況,感覺(jué)用

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

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

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

    評(píng)論

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲人成人网站色www| 精品国产污污免费网站入口在线 | 亚洲黄黄黄网站在线观看| 亚洲黄色免费网址| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲国产综合人成综合网站00| 亚洲一区爱区精品无码| 国产hs免费高清在线观看| 免费A级毛片无码无遮挡内射| 黄色片免费在线观看| 一级视频免费观看| 亚洲av永久无码天堂网| wwwxxx亚洲| 亚洲福利视频网址| 国产亚洲欧美日韩亚洲中文色| 亚洲第一精品福利| 亚洲中文字幕久久精品无码喷水 | 国产成人精品日本亚洲专| 亚洲国产精品久久久久网站| 久久久久久久亚洲精品| 免费h成人黄漫画嘿咻破解版| 成人免费毛片观看| 97无码免费人妻超级碰碰夜夜| 亚洲人成免费电影| 2021在线观看视频精品免费| 日本免费人成网ww555在线| 中文字幕在线免费看线人| 黄视频在线观看免费| A级毛片成人网站免费看| 中文字幕成人免费高清在线视频| 人妻无码中文字幕免费视频蜜桃| 亚洲AV网一区二区三区| 国产一区二区三区亚洲综合| 在线看亚洲十八禁网站| 羞羞漫画小舞被黄漫免费| 国产精品亚洲精品爽爽| 免费无码国产在线观国内自拍中文字幕 | 国产精品亚洲不卡一区二区三区 | 中文字幕在线观看免费| 丝瓜app免费下载网址进入ios| 久久高潮一级毛片免费|