freemark对null值得处理技巧

本文介绍了Freemarker模板引擎中的null处理方式,包括如何使用exists关键字和??运算符检查变量是否存在,以及如何利用!运算符指定默认值。此外还讨论了不同场景下这些操作的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部分转载自 [url]http://blog.youkuaiyun.com/pk490525/article/details/7590362[/url]


//以下引用官方描述:
//引用
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值