默认情况下,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}。

freemarker空值的多种处理方法的更多相关文章

  1. [转载]oracle 11g不能导出空表的多种解决方法

    原文地址:11g不能导出空表的多种解决方法">oracle 11g不能导出空表的多种解决方法作者:Anlin_Yang ORACLE 11g 用exp命令导出库文件备份时,发现只能导出 ...

  2. Freemarker中Configuration的setClassForTemplateLoading方法参数问题

    今天使用freemarker中Configuration的setClassForTemplateLoading方法遇到了加载模板目录的一个小问题. 由于网上的其他论坛,博客写的有点乱,故记录一下. F ...

  3. js面向对象 多种创建对象方法小结

    转自js面向对象 多种创建对象方法小结 1.对象字面量 var clock={ hour:12, minute:10, second:10, showTime:function(){ alert(th ...

  4. android全屏去掉title栏的多种实现方法

    android全屏去掉title栏的多种实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2013-02-18我要评论 android全屏去掉title栏包括以下几个部分:实现应用中的所有ac ...

  5. freemarker空值的处理

    FreeMarker的变量必须赋值,否则就会抛出异常.而对于FreeMarker来说,null值和不存在的变量是完全一样的,因为FreeMarker无法理解null值.FreeMarker提供两个运算 ...

  6. js面向对象,多种创建对象方法!

    1.对象字面量. var clock={ hour:12, minute:10, second:10, showTime:function(){ alert(this.hour+":&quo ...

  7. js返回上一页并刷新的多种实现方法

    <a href="javascript:history.go(-1)">返回上一页</a> <a href="javascript:loca ...

  8. java webservice的多种实现方法汇总

    一.基于EJB容器管理webservice :     1.首先建立一个Web services EndPoint: package cn.test.service.impl; import java ...

  9. Javascript/Jquery——简单定时器的多种实现方法

    第一种方法: <script language="javascript"> //使用setInterval间歇调用 (不建议使用该方法) $(function(){ s ...

随机推荐

  1. js列表分页

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JS刷新页面的几种方法(转)

    Javascript刷新页面的几种方法: 1 history.go(0) 2 location.reload() 3 location=location 4 location.assign(locat ...

  3. ajax简单案例:字符串返回类型

    小知识点: implode("^",$v) 拼数组为字符串, split/explode("|")   拆字符串为数组; "你好"-> ...

  4. 【linux】grub加密

    1.计算grub的MD5加密密码: #grub-md5-crypt Password: Retype password:输入两遍密码进行确认以后,就会计算出你所输入密码的MD5加密值,如:$1$pFd ...

  5. 冒泡算法C#

    冒泡算法C# namespace数组排序 { classProgram { staticvoidMain(string[]args) { inttemp=; ,,,,,,,,}; #region该段与 ...

  6. 队列(Queue)--环形队列、优先队列和双向队列

    1. 队列概述 队列和堆栈都是有序列表,属于抽象型数据类型(ADT),所有加入和删除的动作都发生在不同的两端,并符合First In, First Out(先进先出)的特性. 特性: ·FIFO ·拥 ...

  7. Spark配置参数调优

    1.配置多个executor 在项目中,由于数据量为几百万甚至千万级别,如果一个executor装载的对象过多,会导致GC很慢.项目中,我们使一个worker节点执行app时启动多个executor, ...

  8. POJ 3984 迷宫问题(BFS)

    迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...

  9. suibi 117

    -Djava.net.preferIPv4Stack=true re.findall(r"^(\d+)" , content) content = content.replace( ...

  10. C++模板元编程 - 1 基本数据类型和运算

    这是博客开通前几天做的,C++的模板没办法存方便的浮点数,算了. 基本类型的设计参考了vczh轮子叔模仿boost的MPL的设计. 话说template和typename写多了真是无限烦人啊,不得已定 ...