【问题标题】:How to set null to a variable in freemarker如何在freemarker中将null设置为变量
【发布时间】:2014-10-01 04:04:19
【问题描述】:

我在任何问题上都找不到与此相关的任何内容,这是非常基本的问题,但我无法弄清楚。

所以我的问题是我不知道如何将 null 设置为 freemarker 中的变量。 示例:

${hi!"bye"}          <#-- Prints "bye" because hi is undefined -->
<#assign hi="hi">    <#-- Sets a value to the var hi -->
${hi!"bye"}          <#-- Prints "hi" because hi has a value -->
<#assign hi=null>    <#-- This does not work but is what I am looking for -->
${hi!"bye"}          <#-- I want it to print "bye" because hi should be undefined -->

我有这个问题,因为我遍历一个列表并设置一个 var 如果特定项目的某些逻辑验证,然后检查 var 是否存在,但如果第一个项目创建 var,那么我将设置 var对于列表中的其余项目。

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    不,FreeMarker 中不存在“取消分配”,null 的概念也不存在(至少在 2.4.0 之前,但无论如何这还很遥远)。它只有缺失的变量(从技术上讲可能是null,可能根本不存在)和那些存在的变量。我真的不明白为什么在您的情况下需要这样做。你能举一个简单的例子吗?

    【讨论】:

    • 我需要它,因为我遍历了一个列表,并且我想在每个循环开始时将变量设为空,这样我就可以检查它是否为空。我使用 assign 修复了它== "" 然后检查 ?has_content ..谢谢!
    • 那么你实际上需要一个作用域变量。现在,您可以从循环体中调用#function。在那里你可以有#local-s。
    • 你的意思是一个范围变量,范围将在每个循环中?这可能吗?
    • 是的,除了标准的“循环变量”之外,您不能拥有属于循环体的范围变量。但是,您可以定义一个#macro(不是#function...,这是一个错字),然后从循环内部调用它,然后您就可以拥有#local-s。
    【解决方案2】:

    您可以为您的变量分配一个空字符串,并检查内置的?has_content 是否已设置:

    ${hi?has_content?then(hi, "bye")}
    <#assign hi="hi">
    ${hi?has_content?then(hi, "bye")}
    <#assign hi="">
    ${hi?has_content?then(hi, "bye")}
    

    这将呈现:

    bye
    hi
    bye
    

    【讨论】:

      【解决方案3】:

      根据您的需要,您可以使用不同的类型来指示“缺失”值。

      例如,如果您的 myVariable 通常是一个数字,请将 false 分配给它,然后检查 myVariable!false?is_number 而不是检查 myVariable??。这将涵盖两种情况(不存在和“未设置”)。

      ${ (myVariable!false?is_number)?c }
      
      <#assign myVariable = 12 >
      ${ (myVariable!false?is_number)?c }
      
      <#assign myVariable = false >
      ${ (myVariable!false?is_number)?c }
      

      结果:

      false
      12
      false
      

      Go try.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-21
        • 1970-01-01
        • 2020-08-28
        • 2017-06-21
        • 1970-01-01
        • 2010-12-23
        相关资源
        最近更新 更多