FreeMarker判断变量或数组是否为空或不存在
2019-02-28 本文已影响8人
左手气球右手书
判断变量是否为空或不存在
数据模型中经常会有可选的变量(也就是说有时并不存在)。 除了一些典型的人为原因导致失误外,FreeMarker 绝不能容忍引用不存在的变量, 除非明确地告诉它当变量不存在时如何处理。这里来介绍两种典型的处理方法:
一个不存在的变量和一个是 null 值的变量, 对于FreeMarker来说是一样的,所以这里所指的"丢失"包含这两种情况。
- 不论在哪里引用变量,都可以指定一个默认值来避免变量丢失这种情况,:通过在变量名后面跟着一个 !和默认值。 就像下面的这个例子,当 user 不存在于数据模型时, 模板将会将 user 的值表示为字符串 "visitor"。(当 user 存在时, 模板就会表现出 user的值):
${user!"visitor"}
- 也可以在变量名后面通过放置 ?? 来询问一个变量是否存在。将它和 if 指令合并, 那么如果 user 变量不存在的话将会忽略整个问候的代码段:
<#if user??>
${user}
</#if>
关于多级访问的变量,比如 animals.python.price, 书写代码:animals.python.price!0
当且仅当 animals.python 永远存在, 而仅仅最后一个子变量 price 可能不存在时是正确的 (这种情况下我们假设价格是 0)。如果 animals 或 python 不存在, 那么模板处理过程将会以"未定义的变量"错误而停止。为了防止这种情况的发生, 可以如下这样来编写代码 :
(animals.python.price)!0。
这种情况就是说 animals 或 python 不存在时, 表达式的结果是 0。
对于 ?? 也是同样用来的处理这种逻辑来处理:
(animals.python.price)??
判断数组是否为空或不存在
同上所述:
<#if orgList?? && (orgList?size > 0) >
</#if>