【问题标题】:Handling null values in Freemarker在 Freemarker 中处理空值
【发布时间】:2012-12-06 16:21:22
【问题描述】:

如何处理 Freemarker 中的null 值?当数据中存在null 值时,我在模板中遇到了一些异常。

【问题讨论】:

标签: freemarker


【解决方案1】:

从freemarker 2.3.7开始,你可以使用this syntax

${(object.attribute)!}

或者,如果您想在属性为 null 时显示默认文本:

${(object.attribute)!"default text"}

【讨论】:

  • 对于那些使用 Freemarker 作为 XDocReport 模板引擎的人,在您的 pom.xml 中添加 <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.22</version></dependency> 后,这是有效的。
  • 如果你有一个日期并且日期可能为空,你会怎么做?换句话说 object.dateAcquired 其中 dateAcquired 可能为 null 并且您有 ${object.dateAcquired?date}
  • @StephaneGrenier 使用${(object.dateAcquired?date)!"not present"}
  • 很好的例子。帮了我很多。然而,支架已过时。 ${salutation!'Dear Mr. or Mrs.'}
  • 知道如何打印 .now?long 的默认值吗?
【解决方案2】:

您可以使用?? 测试运算符:

这会检查对象的属性是否不为空:

<#if object.attribute??></#if>

这会检查对象或属性是否不为空:

<#if (object.attribute)??></#if>

来源:FreeMarker Manual

【讨论】:

  • 这种方式和has_content有什么区别??
  • has_content,在空值检查旁边,还会检查值是否不为空。这适用于字符串、序列、散列或集合。如果对象是日期、布尔值或数字,则它充当非空对象。对于所有其他类型,它将充当空。
  • 我遇到了这个问题,我必须检查 bean 中的值是否为 null。我尝试了以下方法:${checknull(Bean.getValue())},其中 checknull if 函数 #if> #function> 但我得到“执行宏时出错:checknull required parameter: x is not指定的。”错误
  • 你必须反转返回值: #if> #函数>
  • 请查看以下答案:stackoverflow.com/a/27614219/3002336
【解决方案3】:

我认为它是另一种方式

<#if object.attribute??>
   Do whatever you want....
</#if>

如果object.attribute 不为空,则打印内容。

【讨论】:

    【解决方案4】:

    &lt;#if&gt; 语句的末尾使用 ?? 运算符。

    此示例演示如何处理 Freemaker 模板中两个列表的 null 值。

    List of cars:
    <#if cars??>
        <#list cars as car>${car.owner};</#list>
    </#if>
    List of motocycles:
    <#if motocycles??>
        <#list motocycles as motocycle>${motocycle.owner};</#list>
    </#if>
    

    【讨论】:

      【解决方案5】:

      如果您有问题,我想添加更多上下文,这是我尝试过的。

      <#if Recipient.account_type?has_content>
        … (executes if variable exists)
      <#else>
        … (executes if variable does not exist)
      </#if>
      

      这更像是 Javascript 的 IF 和 ELSE 概念,我们要检查该值是否通过所需的逻辑链接。

      Freemarker webite

      Other reference:

      场景:客户的 ID 和姓名结合起来像 13242 Harish,所以我们的利益相关者需要唯一的姓名,所以我尝试了这个 ${record.entity?keep_after(" ") } 它确实有效,但是,它只能在您有空间时工作,但是当客户没有空间和一个名字时,我必须做一些 IF ELSE 条件来检查 Null 值。

      【讨论】:

        猜你喜欢
        • 2017-02-01
        • 2014-06-19
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        相关资源
        最近更新 更多