刚学FreeMarker的时候,发现freemarker真的很棒,但是用它做了几个项目以后问题来了,而且是很讨厌的问题.下面我就来说说FreeMarker的这几大罪状. 

罪状一:freemarker的变量必须有值,没有被赋值的变量就会抛出异常,那个黄黄的freemarker出错页面,真是让人看了太难过了。
freemarker的FAQ上面冠冕堂皇的说,未赋值的变量强制抛错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误。但是实际的效果是:带来的是非常大的编程麻烦,程序里面几乎所有可能出现空值的变量统统需要加上${xxx?if_exists},有些循环条件还需要写if判断,这样不但没有杜绝应该杜绝的错误,反而极大增加了编程的麻烦。

罪状二:freemarker的map限定key必须是string,其他数据类型竟然无法操作!这一点就不讲了,JavaEye上面已经有人抱怨过了。连Webwork的开发人员Pat Lightboy都在抱怨这一点。


罪状三:freemarker为了编程方便把不可序列化的东西往session里面放!
freemarker支持在页面里面直接操作Session,request等,例如${Session[...]},方便确实很方便,但是一旦需要做群集,就会报错。
有朋友今天问起,他在做Tomcat群集的时候发现freemarker报错,HttpSessionHashModel不可序列化。他修改该类源代码,让他实现序列化接口,仍然报错。我一看,HttpSessionHashModel包含的属性:
FreeMarker的几大罪状_FreeMarker
登时晕倒,这样的东西还往Session里面放?
 
看了 FreeMarker的几大罪状的几大罪状,你是否还有信心再去用freemarker.每一个软件都有它自己身的优点与缺点,像人类一样.任何事物都是这样的.如果你有任何的意见与见意敬请留言.
本文《FreeMarker的几宗罪》出自“百洋oecp社区