【问题标题】:Unsetting a variable in Velocity在 Velocity 中取消设置变量
【发布时间】:2009-03-18 09:31:09
【问题描述】:

是否可以将 Velocity 引用设置为“null”或“undefined”?

Velocity template language reference

#set - 建立引用的值 格式:

# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )

用法:

$ref - 赋值的 LHS 必须是变量引用或属性引用。

arg - 赋值的 RHS,如果用双引号括起来,则解析 arg,而不是 如果用单引号括起来,则解析。 如果 RHS 计算结果为 null,则未分配 到 LHS。(强调我的)

我找不到等效的 #unset 宏。

【问题讨论】:

    标签: java templates velocity


    【解决方案1】:

    您可以将引用设置为 false。由于非空引用被认为是真实的,因此您可以测试是否设置了引用。这在循环中很有用。

    #foreach($list 中的 $obj) #set ($x = false) #set ($x = $obj.maybeNull()) #if ($x) ... $x #结尾 #结尾

    【讨论】:

    • 由于速度变量将保留旧值,如果您尝试分配“空值”,我发现这个解决方案非常好。在循环结束时,我只是将变量设置为 false,当您无法分配值时,它的值将为 false。
    【解决方案2】:

    继续阅读...

    取决于速度如何 配置,通常是不可能的 删除现有的引用 通过这种机制的上下文。 (笔记 这可以通过改变来允许 速度配置之一 属性)

    在VE默认配置中有属性

    directive.set.null.allowed = false
    

    如果为真,则有 a 的右手边 具有无效引用或空值的 #set() 语句将设置 左侧为空。如果为假,则 左侧将保持不变

    org.apache.velocity.app.Velocity 上使用setProperty() 将其更改为true,然后您就可以开始了。

    【讨论】:

      【解决方案3】:

      如果你试图获取作用域变量,你可以滥用#foreach建立的作用域:

      #foreach($localVar in [ 'theValue'])
      
      #end
      
      ## localVar will be unset (or returned to previous value) again
      

      【讨论】:

        猜你喜欢
        • 2011-03-12
        • 1970-01-01
        • 2011-01-03
        • 2014-09-03
        • 2013-06-28
        • 2011-08-10
        • 2017-11-14
        • 2014-07-15
        • 1970-01-01
        相关资源
        最近更新 更多