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

  • 相关阅读:
    JDK8 Optional类使用
    Kafka RocketMQ
    Dubbo,ElasticSearch,JVM,多线程/高并发,消息中间件 常问问题
    Redis
    java jvm 虚拟机
    25 岁做什么,可在 5 年后受益匪浅?
    设计模式
    并发与并行的理解
    多线程学习
    FireFox 如何在当前页面打开书签
  • 原文地址:https://www.cnblogs.com/bingosblog/p/4146140.html
Copyright © 2020-2023  润新知