这几天在维护一个导出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时,时常出现,若隐若现,飘忽不定,做的好好的就除了这么一个错误,让人恼火,同时也增加了它的神秘性,在百度后,没有找到关于它的解决方法。今天研究了很长时间,终于找到出错原因了。出错表格部分如下:
由于培训是两列,第一次做的时候,直接将第一行写好的变量直接复制到第二行,
测试了一下当培训只有一条的情况下,显示了两条相同的数据,OK导出正常。如下图:
但是,当第二行数据重命名时候:
变会出现第二种情况的错误,显然是标签错误,但仔细检查后,也没发现任何问题,奇了怪了。无奈,经多次尝试,最终删掉第二行,将第二行的数据重新手打了一遍,没用复制粘贴。然后测试,PASS! 难道还真的是这个问题,又将第二行第一列中的${pxname2}改成了第一行第一列中的${pxname},测试,不出意料,报错!
由此,在开发中,flt定义好的标签要更改,要将该标签删掉,重新打一次,不要在标签上直接更改,否则就会报错。原因呢,也许只有耶稣才知道吧。