freemark null处理

以下引用官方描述: 


引用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)??来看。 

原文地址:https://www.cnblogs.com/bingosblog/p/4146140.html