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

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

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

    piliskys

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      25 隨筆 :: 0 文章 :: 40 評論 :: 0 Trackbacks
    用過struts都清楚,struts的開發一般要寫兩個類,FormBean和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的強制轉型
    ????????
    //這里就是你要處理的業務邏輯了?
    ????????return?mapping.findForward("XXXX");
    ????}
    這是一個Action最少的代碼了,它沒有處理任何邏輯,只是一個跳轉,FormBean的話,只要繼承ActionForm,代碼到沒有規定,到時,我們可能會想,每個Action里面都必須寫上面那些代碼,煩啊,還有在每個FormBean里我們一般都會定義一些常用的屬性,如event,根據event的值,我們來決定一些邏輯的處理及頁面的跳轉,每次要寫,也煩啊。
    ?? 好,煩的話,那我們要開始做點事情了,首先,寫一個formBean代碼如下:
    public?class?XXXForm?extends??ActionForm{
    ????
    private?String?event;//事件名
    ????public?String?getEvent()?{
    ????????
    return?event;
    ????}

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

    }
    我想這誰都應該清楚,然后我們再寫frombean時,就不要extends? ActionForm,而是extends? XXXForm了,這樣,我們省了些代碼,我們再來看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));
    ????}

    ?????
    /**
    ??????*?處理一些業務
    ??????*?
    @param?form
    ??????*?
    @return????返回mapping指向的字符串
    ??????
    */

    ???
    public?abstract??String?doAction(BaseForm?form);//抽象
    }
    這樣的話,我們再寫Action類時,就不extends Action而是extends XXXAction,代碼就像:
    public?class?***Action?extends?XXXAction?{
    ????
    public?String?doAction(XXXForm?form)?{
    ????????
    ***Form?theform?=?(***Form)?form;//強制轉成你真正的formbean
    ?????
    //這里就是你要處理的業務邏輯了???
    ?????return?"success";
    ????}

    }

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

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

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

    request是強烈要求要還給我們的,好,那我們來重構下formbean和action吧,以下我們用BaseForm,及

    BaseAction來定義,兩個類都放在同一個包中

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

    user,
    ??????*?但reguser字符串對一般開發人員可能是不可見的
    ??????
    */

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

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

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

    ????
    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));
    ????}

    ?????
    /**
    ??????*?處理一些業務
    ??????*?
    @param?form
    ??????*?
    @return????返回mapping指向的字符串
    ??????
    */

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

    到此算為結束,可能有為會問,那還有response呢,response的話,一般出現在內部跳轉等情況,感覺用

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

    萬事都應該有個度,自己衡量。

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

    評論

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


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲成人免费网站| 亚洲精品视频专区| 污视频网站在线观看免费| 无码国产精品一区二区免费| 久久久久亚洲AV成人无码网站| 中文字幕乱理片免费完整的| 夜夜春亚洲嫩草影院| 国产麻豆成人传媒免费观看| 久久久综合亚洲色一区二区三区 | 亚洲日本中文字幕天天更新| 久久这里只有精品国产免费10| 性xxxx黑人与亚洲| 日韩免费高清视频网站| 美国毛片亚洲社区在线观看| 亚洲成av人片不卡无码久久| 2022免费国产精品福利在线| 亚洲AV无码一区二区乱子伦| 久久成人国产精品免费软件| 亚洲色偷偷偷综合网| 四虎影视永久免费观看网址| 国产高清对白在线观看免费91| 国产成人亚洲综合色影视| 2021国内精品久久久久精免费| 在线观看日本亚洲一区| 免费一级e一片在线播放| a级毛片高清免费视频| 亚洲第一精品电影网| 免费高清在线影片一区| 亚洲第一视频在线观看免费| 无码欧精品亚洲日韩一区| 18禁无遮挡无码网站免费| 一道本在线免费视频| 亚洲网址在线观看| 四虎永久免费网站免费观看| 免费毛片a线观看| 亚洲熟妇无码一区二区三区| 在线a亚洲v天堂网2019无码| 69成人免费视频| 亚欧国产一级在线免费| 亚洲av专区无码观看精品天堂| www亚洲精品少妇裸乳一区二区|