是否可以将Velocity引用设置为'null'或'undefined'?
Velocity template language reference说
#set
- 建立参考的价值 格式:
# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )
用法:
$ref
- 作业的LHS必须是变量引用或属性引用。
arg
- 赋值的RHS,arg如果用双引号括起来解析,而不是 如果用单引号括起来解析。 如果RHS评估为null,则不会分配 到LHS。(强调我的)
我找不到等效的#unset
宏。
答案 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