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