修改AppFuse

用AppFuse有一段时间了,也发现了它的一些问题,或者说不适合我们开发的地方。

build.xml中的setup:setup是安装数据库、tomcat、生成源代码并部署的target,在初次使用时很方便。但以后使用就有点问题了,因为每次执行这个命令就要把数据库删除重新安装一遍,尤其是在多人同时开发的时候,每个人都setup一次实在有点麻烦。因此我在使用过一次setup后,就将命令depends="setup-db,setup-tomcat,deploy"修改为depends="package-dao,setup-tomcat,deploy",以后再使用这个命令就不会再去动数据库了。如果有需要修改数据库的地方,单独运行ant setup-db。
ApplicationResources_zh_CN.properties & ApplicationResources_zh.properties:这两个中文资源文件中存在乱码,需要把乱码的地方修改过来。很奇怪的是将修改好的文件copy到别的地方又会出现同样的乱码,所以事先要做好备份工作。
AppGen:使用AppGen生成文件的时候常常会在sample-data处报错。原因我没仔细研究,但自我认为sample-data.xml在这里没有生成的必要,所以在extras\appgen\build.xml中搜索sample-data.xdt,将该处的template标签注释掉了。
struts_form.xdt:\metadata\templates下的struts_form.xdt是用来根据POJO生成FormBean的xdoclet文件。当POJO中含有同样是POJO类型的属性时(通常是表中的父表关系),FormBean倒不会有问题,可validation.xml会自动将这个父亲中的所有属性也纳入当前FormBean里进行验证。这意味着我们在做子表单时必须包含父表单中的所有属性,麻烦!validation.xml是根据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,系统找不到这条记录,当然会报错了。在extras\appgen\src\detailed下有生成DAOTest类的模版DAOTest.xdt,找到testRemove方法,把第一句修改为<XDtMethodEx:idField getType="propertyType"/> removeId = <XDtForm:classNameLower/>Id; 这样,删除的记录主键值就与添加的主键值就一致了。不过如果主键是随机生成的,这个办法就不行了,那么自己修改测试类吧。
密码加密:AppFuse默认是给用户密码加密的,如果不想加密,需要在properties.xml中设置属性encrypt.password为false,这样用户登录时系统就不会对密码加密了。但是用户注册和编辑信息时程序却没有进行判断,直接对密码加密。这里需要修改的地方有两个:SignupAction和UserAction,分别对加密的地方做一个判断。Boolean encrypt = (Boolean) getConfiguration().get(Constants.ENCRYPT_PASSWORD);一句可以拿到配置文件中的值。
在新版的AppFuse1.9.1中,作者对Displaytag显示的信息也进行了汉化。但是在部署时忘了转成unicode码,于是,JSP页面上会出现乱码。这个要修改build.xml。搜索“native2ascii”,会找到转换ApplicationResources.properties的地方,与这个文件的操作类似,在native2ascii标签的includes里添加displaytag_zh*.properties。另外,在这个target的copy fileset标签里要exclude displaytag_zh*.properties。

你可能感兴趣的:(DAO,tomcat,struts,单元测试,Appfuse)