以下引用官方描述:
引用The FreeMarker template language doesn't know the Java language null at all. It doesn't have null keyword, and it can't test if something is null or not.
1.判断是否存在,通过exists关键字或者"??"运算符。都将返回一个布尔值
user.name?exists
user.name??
<#if user.name?exists>
//TO DO
</#if>
<#if user.age??>
//TO DO
</#if>
2.忽略null值
假设前提:user.name为null
${user.name},异常
${user.name!},显示空白
${user.name!'vakin'},若user.name不为空则显示本身的值,否则显示vakin
${user.name?default('vakin')},同上
${user.name???string(user.name,'vakin')},同上
转自:http://vakinge.javaeye.com/blog/734949
这里所指的丢失包含这两种情况。
不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,通过在变量名 后面跟着一个!和默认值。就像下面的例子,当user 从数据模型中丢失时,模板将会将 user 的值表示为字符串”Anonymous”。(若user 并没有丢失,那么模板就会表现
出”Anonymous”不存在一样):
<h1>Welcome ${user!"Anonymous"}!</h1>
当然也可以在变量名后面通过放置??来询问FreeMarker 一个变量是否存在。将它和if 指令合并,那么如果user变量不存在的话将会忽略整个问候代码段:
<#if user??><h1>Welcome ${user}!</h1></#if>
关于多级访问的变量,比如 animals.python.price,书写代码:
animals.python.price!0,仅当animals.python存在而仅仅最后一个子变
量price 可能不存在 (这种情况下我们假设价格是0)。如果animals 或者python
不存在,那么模板处理过程将会以“未定义的变量”错误而停止。为了防止这种情况的发生,
可以这样来书写代码 (animals.python.price)!0 。这种情况下当animals 或
python 不存在时表达式的结果仍然是 0 。对于??也是同样用来的处理这种逻辑的:
animals.python.price??对比(animals.python.price)??来看。