`

freemark对null值得处理技巧

阅读更多
部分转载自 http://blog.csdn.net/pk490525/article/details/7590362

//以下引用官方描述: 
//引用
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??
[html] view plaincopy
<#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')},同上
 
 
!语法 :
(1).原理:使用形式概览:unsafe_expr!default_expr或unsafe_expr!或  (unsafe_expr)!default_expr或(unsafe_expr)!
这个操作符允许你为可能不存在的变量指定一个默认值。
(2)例如:假设下面展示的代码中没有名为mouse的变量:
当这样定义时
 ${mouse!"no mouse"}
<#assign mouse="lala">
 ${mouse!"no mouse"}
将会输出
no mouse
lala
另外默认值可以是任何类型的表达式,也可以不必是字符串。你也可以这么写:
hits!0或colors!["red", "green", "blue"]。默认值表达式的复杂程度没有严格限制,你还可以这么来写:cargo.weight!(item.weight * itemCount + 10) 。
(3)警告:
如果在!后面有复合表达式,如1 + x,通常使用括号,像${x!(1 + y)}或${(x!1) + y)},这样就根据你的意思来确定优先级。由于FreeMarker 2.3.x版本的源码中的小失误所以必须这么来做。!(作为默认值操作)的优先级非常低。这就意味着${x!1 + y}会被FreeMarker误解为${x!(1 + y)},而真实的意义是${(x!1) + y}。这个源码的错误在FreeMarker 2.4中会得到修正。在编程中注意这个错误,要么就使用FreeMarker 2.4!
如果默认值被省略了,那么结果将会是空串,空序列或空哈希表。(这是FreeMarker允许多类型值的体现)如果想让默认值为0或false,则注意不能省略它。例如:
当这样定义时
(${mouse!})
<#assign mouse="lala">
(${mouse!})
将会输出
()
(lala)

另外注意点详见freemark文档


??语法: Missing value test operator ,测试是否为missing value 
       unsafe_expr?? :product.color??将只测试color是否为null
      (unsafe_expr)??:(product.color)??将测试product和color是否存在null 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics