美文网首页
FreeMarker判断变量或数组是否为空或不存在

FreeMarker判断变量或数组是否为空或不存在

作者: 左手气球右手书 | 来源:发表于2019-02-28 10:41 被阅读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>
    

    相关文章

      网友评论

          本文标题:FreeMarker判断变量或数组是否为空或不存在

          本文链接:https://www.haomeiwen.com/subject/fithuqtx.html