風(fēng)人園

          弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
          隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
          數(shù)據(jù)加載中……

          SpringSide的Struts封裝

          SpringSide的Struts封裝

          1.概述?

          ?? SpringSide對Struts做了兩層封裝:

          ?? 第一層:StrutsAction,繼承于DispatchAction,附帶一些Utils函數(shù),另外注冊了幾個Converter。

          ?? 第二層:StruttsEntityAction,繼承于StrutsAction, 演示了如何為單個對象的CRUD操作(增刪改查)封裝了默認(rèn)Action,子類只需要范型聲明所管理的對象類型和管理類型,即擁有CRUD操作的能力。

          ????大家各自項目的習(xí)慣不同,流程,可以參考SpringSide的封裝,封裝自己的版本。

          ??? 典型子類代碼如下:

          								public class UserAction extends StrutsEntityAction<User,UserManager> {
               private UserManager userManager;
               public void setUserManager(UserManager userManager) {
                     this.userManager = userManager;
               }
             }

          ?? 第一 extends StrutsEntityAction<User,UserManager>,聲明管理的Entity類型是User,管理的Entity是UserManager,UserManager必須實(shí)現(xiàn)EntityDao<T>接口;
          ?? 第二 定義userManager用于依賴注入的setter函數(shù);

          2.原理

          ???? StrutsEntityAction 會持有一個EntityDao接口的實(shí)體來做CRUD的操作,子類通過在泛型中聲明UserAction<User, UserManager>,自動查找屬性中類型為UserManager的屬性作為EntityDao。如果子類有多個UserManager屬性(很少的情況),就需自行實(shí)現(xiàn)getEntityManager()函數(shù)。

          ???? CRUD現(xiàn)在主要封裝了list、edit、view、save、delete 5個流程,一般會調(diào)用doListEntity、doGetEntity、doNewEntity、doSaveEntity(),doDeleteEntity 5個業(yè)務(wù)函數(shù)去做相應(yīng)的業(yè)務(wù)操作。

          ???? 在controller中很重要的request 數(shù)據(jù)與POJO的轉(zhuǎn)換,由initEntity、initForm? 兩個函數(shù)完成。

          ???? initEntity 先調(diào)用bindObject 函數(shù)用BeanUtils 直接copy lazyBean的FormBean 和 Entity POJO,然后調(diào)用子類的onInitEntity()函數(shù)。initForm是同樣的原理。

          ?????通常還有一些輔助的對象,比如Book 修改頁要有Category列表做下拉選擇框,這些輔助對象統(tǒng)一子類重載onRefrence()函數(shù)放入request.attributes.

          3.擴(kuò)展與客戶化

          ?? EntityAction必須預(yù)留足夠的擴(kuò)展點(diǎn)給子類重載,具體函數(shù)注釋見StrutsEntityAction的JavaDoc, 包括:

          ??? 1.list、edit、view、save、delete: 五種action的流程封裝;
          ?? 2.doListEntity、doGetEntity、doNewEntity、doSaveEntity(),doDeleteEntity: 五種業(yè)務(wù)函數(shù)調(diào)用;
          ? ?3.initEntity、initForm?: FormBean與業(yè)務(wù)對象的初始化函數(shù)及refrenceData,onInitForm,onInitEntity 三個回調(diào)函數(shù);
          ?? 4.savedMessage、deletedMessage: 兩種業(yè)務(wù)操作成功后顯示的信息的回調(diào)函數(shù)。

          ??幾個回調(diào)函數(shù)在子類重載,而如果幾個封裝函數(shù)不合心意,請重新擴(kuò)展一個基類或完全重新封裝。

          posted on 2006-12-16 14:35 風(fēng)人園 閱讀(604) 評論(0)  編輯  收藏 所屬分類: Struts

          主站蜘蛛池模板: 惠东县| 扬州市| 咸阳市| 邮箱| 蓬溪县| 青铜峡市| 石门县| 大冶市| 固镇县| 盐亭县| 达日县| 阿巴嘎旗| 镇原县| 宁陕县| 南开区| 屏南县| 闵行区| 海盐县| 台安县| 尚志市| 子长县| 武清区| 屯昌县| 麻城市| 高安市| 石楼县| 静海县| 汕头市| 西藏| 昭通市| 扬州市| 廉江市| 三江| 民县| 板桥市| 闽侯县| 荥阳市| 廉江市| 冷水江市| 那曲县| 宜宾市|