freemarker空值的多种处理方法

默认情况下,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空值的多种处理方法

时间: 2024-12-11 00:13:35

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

[51单片机学习笔记ONE]-----LED灯的多种使用方法

一.交替闪烁8个LED灯,时间间隔为1s 1 /****************************************************** 2 实验名称: 交替闪烁8个LED灯,时间间隔1s 3 实验时间: 2014年12月2日 4 ******************************************************/ 5 6 #include <reg51.h> 7 8 void delay(unsigned char a); 9 10 void m

A标签触发onclick事件而不跳转的多种解决方法

A标签触发onclick事件而不跳转的多种解决方法 一个标签仅仅是要触发onclick行为,遇到了A标签触发onclick事件时不执行跳转: 在web页面开发时,我们经常会遇到下列情况: 1.一个标签仅仅是要触发onclick行为: 2.表现上要有鼠标的pointer指针显示,或者其他类似a标签的视觉效果. 比如执行删除操作时,为了避免误操作,我们要弹出对话框让用户确定是否删除.因此我们经常会用链接<a></a>形式代替<button> 触发onclick事件. <

Servlet、SPringMVC、Struts等防止表单重复提交的多种处理方法

第一种处理方法(非拦截器): 目前这种方法不建议,因为JSP规范不建议写JAVA代码.这种可以方便第二种处理方法的理解,第二种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制. 1.在需要防止重复的jsp中加入下面的java代码, <%@page import="java.util.Random"%> <%@page import="java.util.Set"%> <%@page import="java

Servlet、SPringMVC、Struts等防止表单反复提交的多种处理方法

第一种处理方法(非拦截器): 眼下这样的方法不建议,由于JSP规范不建议写JAVA代码.这样的能够方便另外一种处理方法的理解,另外一种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制. 1.在须要防止反复的jsp中添?以下的java代码, <%@page import="java.util.Random"%> <%@page import="java.util.Set"%> <%@page import="

python 函数参数多种传递方法

python进阶教程之函数参数的多种传递方法 我们已经接触过函数(function)的参数(arguments)传递.当时我们根据位置,传递对应的参数.我们将接触更多的参数传递方式.回忆一下位置传递:复制代码代码如下: def f(a,b,c): return a+b+cprint(f(1,2,3)) 在调用f时,1,2,3根据位置分别传递给了a,b,c.关键字传递有些情况下,用位置传递会感觉比较死板.关键字(keyword)传递是根据每个参数的名字传递参数.关键字并不用遵守位置的对应关系.依然

FreeMarker空值处理运算符

FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变量完全相同. 为了处理缺失变量,FreeMarker提供了两个运算符:

批处理中的多种注释方法

有些时候,我们需要在批处理中使用大段的注释,即连续的注释超过2行.那么,如何实现他呢? 方法有很多种,本文仅列举其中的一部分. ㈠.使用rem 注意:注释中不能使用重定向符和管道符: 当回显处于打开是时,rem 命令及注释内容将被显示: rem 和注释之间要有空格. 示例: rem 注释内容1 rem 注释内容2 rem 注释内容3 ㈡.使用:: Windows XP 可以识别以冒号 (:) 开头作为标签的批处理程序行并且不会将它作为命令处理.如果某行以冒号开始,则该行的任何命令都将被忽略. 示

FreeMarker模版文件中注释方法

旧版本的freemarker采用的是<#comment> 注释 </#comment>方法现在常用注释:<#--注释内容--> FreeMarker模板文件主要由如下4个部分组成:1.文本:直接输出的部分2.注释:<#-- ... -->格式部分,不会输出3.插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出4.FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出

JavaScript函数的多种定义方法

缘起 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对 javascript语言特性更进一步的深入理解,那么他有几种写法呢? ( function(){…} )() 或者 ( function (){…} () ) 首先要明白两个知识点 js中函数是引用类型: 函数一般执行方式:函数名+(): 下面的例子帮你理解引用类型 var a = function(x,y){ console.log(x + y