解决Appfuse使用中的一些问题的方法

解决Appfuse使用中的一些问题的方法

我一直比较喜欢Appfuse这个框架,主要是因为这个框架比较规范。在这个框架下做事,可以养成比较好的工程习惯,比如包组织,命名,工程管理等。

最近使用的版本是1.9.2,使用了 WebWork+Spring+iBatis 这样的组合。在使用过程中,发现了不少问题,把解决的过程记录下来,可以有个参考。

1、dbunit 测试oracle

在dbunit任务中增加 scheme="abc" , abc 是表空间的名字。

2、ibatis 执行报错:sql执行语句为空。

.xml 文件中配置的sql语句最后有";",mysql对逗号不敏感,但oracle下面会出错

3、ibatis 中增加一条记录,其中id为自动增长

增加一段selectKey 在insert段配置中,注意Oracle数据库中这段必须写在sql语句前面。 同时sql语句中要包括id字段。
  <insert id="addRole" parameterClass="role">
  <selectKey resultClass="java.lang.Long" keyProperty="id">    
SELECT SEQ_ROLE_TABLE.nextVal as ID FROM dual
</selectKey>
  <![CDATA[
    insert into role_table (id, name, description) 
    values (#id#, #name#, #description#)
  ]]>
  </insert>
SEQ_ROLE_TABLE 是一个Oralce 的序列对象。最好针对每一个表建立一个。

4、中文问题

displaytag导出pdf中文问题。这个问题无法简单解决,只能下载displaytag的源代码,在 org.displaytag.export.PdfView.java中的initTable()方法中, 去掉原来的取字体语句
smallFont = FontFactory.getFont(FontFactory.HELVETICA, 7, Font.NORMAL, new Color(0, 0, 0));
增加新的取中文普通宋体字体的语句
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);

当然了,还要增加一个包括字体的包:iTextAsian.jar。

5、对象初始化的问题

凡是需要通过ibatis创建的对象,必须有一个无参数,public的构建函数。如果没有任何显式定义的

构建函数也可以,因为默认就是无参数public的。如果没有这个函数,iBatis在创建对象时,创建过程会出错。

6、单元测试的问题

DAO层单元测试中,如果我们向数据库中插入数据,单元测试表示成功,但数据并没有真正在数据库中!怎么回事?原来Appfuse在框架中配置DAO的单元测试都没有真正提交,而是在方法访问成功后回滚了。