在Velocity中取消设置变量

时间:2009-03-18 09:31:09

标签: java templates velocity

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

Velocity template language reference

  

#set - 建立参考的价值   格式:

     

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

     

用法:

     

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

     

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

我找不到等效的#unset宏。

3 个答案:

答案 0 :(得分:23)

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

#foreach ($obj in $list)
#set ($x = false)
#set ($x = $obj.maybeNull())
#if ($x)
...
$x
#end
#end

答案 1 :(得分:12)

继续阅读...

  

取决于速度如何   配置,通常是不可能的   从中删除现有引用   通过这种机制的背景。 (注意   这可以通过改变来允许   Velocity配置之一   属性)

在VE默认配置中有属性

directive.set.null.allowed = false
  

如果是真的,有一个右手边   带有无效引用的#set()语句或null值将设置   左手边为空。如果是假的话   左手边会保持不变

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

答案 2 :(得分:2)

如果您尝试获取范围变量,则可以滥用#foreach建立的范围:

#foreach($localVar in [ 'theValue'])

#end

## localVar will be unset (or returned to previous value) again