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

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

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

    (轉(zhuǎn)載)關(guān)于paramsPrepareParamsStack

    原帖地址:
    http://hi.baidu.com/%CC%AB%C6%BD%D1%F31986/blog/item/110b13b1384e805e08230259.html
    轉(zhuǎn)貼

    paramsPrepareParamsStack在Struts 2.0中是一個(gè)很奇妙的interceptor stack,以至于很多人疑問為何不將其設(shè)置為默認(rèn)的interceptor stack。paramsPrepareParamsStack主要解決了ModelDriven和Preparable的配合問題,從字面上理解來說, 這個(gè)stack的攔截器調(diào)用的順序?yàn)椋菏紫萷arams,然后prepare,接下來modelDriven,最后再params。Struts 2.0的設(shè)計(jì)上要求modelDriven在params之前調(diào)用,而業(yè)務(wù)中prepare要負(fù)責(zé)準(zhǔn)備model,準(zhǔn)備model又需要參數(shù),這就需要在 prepare之前運(yùn)行params攔截器設(shè)置相關(guān)參數(shù),這個(gè)也就是創(chuàng)建paramsPrepareParamsStack的原因。流程如下:
       1. params攔截器首先給action中的相關(guān)參數(shù)賦值,如id  
       2. prepare攔截器執(zhí)行prepare方法,prepare方法中會(huì)根據(jù)參數(shù),如id,去調(diào)用業(yè)務(wù)邏輯,設(shè)置model對(duì)象
       3. modelDriven攔截器將model對(duì)象壓入value stack,這里的model對(duì)象就是在prepare中創(chuàng)建的
       4. params攔截器再將參數(shù)賦值給model對(duì)象
       5. action的業(yè)務(wù)邏輯執(zhí)行 依據(jù)此stack,一個(gè)action的代碼通常如下

    public class UserAction extends ActionSupport implements ModelDriven, Preparable {
        private User user;
        private int id;
        private UserService service; // user business service

        public void setId(int id) {
            this.id = id;
        }

        /**
         * create a new user if none exists, otherwise load the user with the
         * specified id
         */
        public void prepare() throws Exception {
            if (id == 0) {
                user = new User();
            } else {
                user = service.findUserById(id);
            }
        }

        public Object getModel() {
            return user;
        }

        /**
         * create or update the user and then view the created user
         */
        public String update() {
            if (id == 0) {
                service.create(user);
            } else {
                service.update(user);
            }
            return "redirect";
        }

        /**
         * delete the user and go to a default home page
         */
        public String delete() {
            service.deleteById(id);
            return "home";
        }

        /**
         * show the page allowing the user to view the existing data
         */
        public String view() {
            return "view";
        }

        /**
         * show the page allowing the user to view the existing data and change the
         * values
         */
        public String edit() {
            return "input";
        }

    在上述代碼中,edit和view都不需要根據(jù)id再為界面準(zhǔn)備數(shù)據(jù),因?yàn)閜repare方法已經(jīng)準(zhǔn)備好了model,這些方法很簡單。對(duì)于update 方法,prepare首先會(huì)從數(shù)據(jù)庫中加載數(shù)據(jù),然后params攔截器會(huì)將參數(shù)值付給model,在update直接更新就可以,不會(huì)出現(xiàn)數(shù)據(jù)被亂更新 的情況。象Hibernate框架,會(huì)判斷哪些字段更新了,然后進(jìn)行更新,性能也不會(huì)損失。
    通過paramsPrepareParamsStack可以讓流程更明確,代碼更簡潔,也更利于大家的交流。

    posted on 2011-11-16 15:39 AK47 閱讀(439) 評(píng)論(0)  編輯  收藏 所屬分類: Structs

    <2011年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲AV男人的天堂在线观看| 亚洲精品国产精品乱码不99 | 一二三四在线播放免费观看中文版视频 | 18禁免费无码无遮挡不卡网站| 亚洲av无码一区二区乱子伦as | 免费看国产成年无码AV片| 亚洲资源在线视频| 2021在线永久免费视频| 久久青青草原亚洲av无码app| 2022久久国产精品免费热麻豆| 亚洲美女中文字幕| 成人免费视频77777| 亚洲熟妇丰满xxxxx| 国产男女性潮高清免费网站 | 一个人在线观看视频免费| 亚洲一本之道高清乱码| 性一交一乱一视频免费看| 国产精品久久亚洲一区二区| 亚洲国产精品无码久久青草 | 亚洲高清国产拍精品青青草原 | 一级做a爱过程免费视频高清| 久久精品国产亚洲Aⅴ蜜臀色欲| 波多野结衣免费一区视频 | 亚洲成A人片在线播放器| 国产精品四虎在线观看免费| 一区二区三区精品高清视频免费在线播放 | 国产精品永久免费| 亚洲国产国产综合一区首页| 免费观看国产网址你懂的| 色综合久久精品亚洲国产| 亚洲视频在线精品| 暖暖免费日本在线中文| 亚洲国产日韩视频观看| 亚洲免费日韩无码系列| 99久久久国产精品免费蜜臀| 亚洲精品无码专区在线| 国产AV无码专区亚洲AV手机麻豆| 亚洲精品国产免费| 免费观看四虎精品成人| 亚洲欧洲精品国产区| 免费A级毛片在线播放不收费|