使用FreeMarker生成Word出错的一点心得

这几天在维护一个导出word的一个功能,领导改了word模板,不得不重来一遍。也不过是刘欢歌中所言:“只不过是重头再来”。废话少说,直接进入主题。用了FreeMaker这么多天,也总结出不少规律。FreeMarker报错就是下面两种。

情景1:

Expression hello is undefined on line 3, column 85440 in doc.ftl.
The problematic instruction:
----------
==> ${label} [on line 3, column 85438 in doc.ftl]
----------

情景2

Was expecting one of:
    <STRING_LITERAL> ...
    <RAW_STRING> ...
    "false" ...
    "true" ...
    <INTEGER> ...
    <DECIMAL> ...
    "." ...
    "+" ...
    "-" ...
    "!" ...
    "[" ...
    "(" ...
    "{" ...
    <ID> ...

第一种错误比较直观,是因为在ftl中定义的${label} 并没有赋值。

今天讨论的是第二种错误,这个错误在使用FreeMarker导出word时,时常出现,若隐若现,飘忽不定,做的好好的就除了这么一个错误,让人恼火,同时也增加了它的神秘性,在百度后,没有找到关于它的解决方法。今天研究了很长时间,终于找到出错原因了。出错表格部分如下:

使用FreeMarker生成Word出错的一点心得

由于培训是两列,第一次做的时候,直接将第一行写好的变量直接复制到第二行,

使用FreeMarker生成Word出错的一点心得

测试了一下当培训只有一条的情况下,显示了两条相同的数据,OK导出正常。如下图:

使用FreeMarker生成Word出错的一点心得

但是,当第二行数据重命名时候:

使用FreeMarker生成Word出错的一点心得

会出现第二种情况的错误,显然是标签错误,但仔细检查后,也没发现任何问题,奇了怪了。无奈,经多次尝试,最终删掉第二行,将第二行的数据重新手打了一遍,没用复制粘贴。然后测试,PASS!  难道还真的是这个问题,又将第二行第一列中的${pxname2}改成了第一行第一列中的${pxname},测试,不出意料,报错!

由此,在开发中,flt定义好的标签要更改,要将该标签删掉,重新打一次,不要在标签上直接更改,否则就会报错。原因呢,也许只有耶稣才知道吧。


使用FreeMarker生成Word出错的一点心得

上一篇:POJ 3169 Layout 差分约束


下一篇:J2se eQuals用法