ALL is Well!

敏捷是一条很长的路,摸索着前进着

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  30 随笔 :: 23 文章 :: 71 评论 :: 0 Trackbacks
本文为原创,欢迎转载,转载请注明出处BlogJava

默认情况下,freemarker的变量必须有值,如果没有被赋值的变量在页面上使用就会抛出异常,出错的信息都会显示在页面上,让人感觉不爽(开发时还可以忍忍)。
 
解决办法:

方法一、我们可以在页面上使用freemarker变量时 以 ${xxx?if_exists} 来处理空值的情况,或采用默认值的方法避免此类问题。但每个freemarker变量都这样处理确实比较让人心烦,请看以下方法。

方法二、在类路径下 加入 freemarker.properties 文件,里面配置 classic_compatible=true。

方法三、通过freemarker.template.Configuration的 config.setClassicCompatible(true);通过源码我们看到,其实方法二、方法三是思想是一致的,只是实现方法不同而已。如果应用中已经存在了 freemarker.properties 并配置了其他的属性,可以在这里配置,否则推荐使用方法三,毕竟没有每个应用的配置文件实在是都够多了。

方法四、在ftl文件内引入 <!--#setting classic_compatible=true-->。

其他关于在spring中的配置这里就省略。现在的项目中没有用到。

总结:方法四是需要在每个需要这样处理的页面都要引入的,比较麻烦,、还是选择使用 方法二、方法三好了。但是方法二、方法三也不是万能的。例如我在action中定义一个MyBean类的对象为 myBean,MyBean中有Comp属性。在页面上就要 用如下语句使用:${myBean.comp},这里myBean可能为null,comp也可能为null。这时候 就要使用方法一了,${(myBean.comp)!} 或 ${(myBean.comp)?if_exists}。

posted on 2010-11-17 13:54 李 明 阅读(2317) 评论(0)  编辑  收藏 所属分类: Freemarker

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问