Posted on 2007-04-27 17:42
kook 閱讀(360)
評論(0) 編輯 收藏 所屬分類:
J2EE
用AppFuse有一段時間了,也發(fā)現(xiàn)了它的一些問題,或者說不適合我們開發(fā)的地方。
- build.xml中的setup:setup是安裝數(shù)據(jù)庫、tomcat、生成源代碼并部署的target,在初次使用時很方便。但以后使用就有點問題了,因為每次執(zhí)行這個命令就要把數(shù)據(jù)庫刪除重新安裝一遍,尤其是在多人同時開發(fā)的時候,每個人都setup一次實在有點麻煩。因此我在使用過一次setup后,就將命令depends="setup-db,setup-tomcat,deploy"修改為depends="package-dao,setup-tomcat,deploy",以后再使用這個命令就不會再去動數(shù)據(jù)庫了。如果有需要修改數(shù)據(jù)庫的地方,單獨運行ant setup-db。
- ApplicationResources_zh_CN.properties & ApplicationResources_zh.properties:這個前面提到過,這兩個中文資源文件中存在亂碼,需要把亂碼的地方修改過來。
- AppGen:使用AppGen生成文件的時候常常會在sample-data處報錯。原因我沒仔細研究,但自我認為sample-data.xml在這里沒有生成的必要,所以在extras\appgen\build.xml中搜索sample-data.xdt,將該處的template標簽注釋掉了。
- struts_form.xdt:\metadata\templates下的struts_form.xdt是用來根據(jù)POJO生成FormBean的xdoclet文件。當POJO中含有同樣是POJO類型的屬性時(通常是表中的父表關系),F(xiàn)ormBean倒不會有問題,可validation.xml會自動將這個父親中的所有屬性也納入當前FormBean里進行驗證。這意味著我們在做子表單時必須包含父表單中的所有屬性,麻煩!validation.xml是根據(jù)FormBean生成的,所以到struts_form.xdt下查找struts.validator,其中有一行:@struts.validator,仔細讀代碼就知道了這里是判斷如果是org.appfuse.model.BaseObject類型的屬性,就在該屬性前加@struts.validator注釋,所以把這一行去掉。如果需要驗證,手動在POJO的get方法前加一行@struts.validator就可以了。不過不知道如果想要單獨對父親屬性中的某個屬性進行驗證該怎么做?
- DAO單元測試:AppGen生成的DAO單元測試類不能通過測試。原來在DAO的測試類中,測試了DAO的CRUD方法。在testAdd方法中,會添加一條主鍵值為1的記錄,可是在testRemove的測試中,刪除的主鍵值卻成了3,系統(tǒng)找不到這條記錄,當然會報錯了。在extras\appgen\src\detailed下有生成DAOTest類的模版DAOTest.xdt,找到testRemove方法,把第一句修改為<XDtMethodEx:idField getType="propertyType"/> removeId = <XDtForm:classNameLower/>Id; 這樣,刪除的記錄主鍵值就與添加的主鍵值就一致了。不過如果主鍵是隨機生成的,這個辦法就不行了,那么自己修改測試類吧。
- 密碼加密:AppFuse默認是給用戶密碼加密的,如果不想加密,需要在properties.xml中設置屬性encrypt.password為false,這樣用戶登錄時系統(tǒng)就不會對密碼加密了。但是用戶注冊和編輯信息時程序卻沒有進行判斷,直接對密碼加密。這里需要修改的地方有兩個:SignupAction和UserAction,分別對加密的地方做一個判斷。Boolean encrypt = (Boolean) getConfiguration().get(Constants.ENCRYPT_PASSWORD);一句可以拿到配置文件中的值。