Сброс переменной в Velocity - PullRequest
14 голосов
/ 18 марта 2009

Можно ли установить ссылку на скорость на 'null' или 'undefined'?

Справочник по языку шаблона Velocity говорит

#set - устанавливает значение ссылки Формат:

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

Использование:

$ref - LHS присвоения должен быть ссылкой на переменную или ссылкой на свойство.

arg - RHS присвоения, arg анализируется, если заключен в двойные кавычки, а не анализируется, если заключен в одинарные кавычки. Если RHS оценивается как ноль, он не назначается к LHS. (выделено мое)

Я не могу найти эквивалент #unset макроса.

Ответы [ 3 ]

23 голосов
/ 18 марта 2009

Вы можете установить ссылку на false. Поскольку ненулевая ссылка считается истинной, вы можете проверить, установлена ​​ли ссылка. Это полезно в циклах.

#foreach ($obj in $list)
#set ($x = false)
#set ($x = $obj.maybeNull())
#if ($x)
...
$x
#end
#end
12 голосов
/ 18 марта 2009

Читать дальше ...

В зависимости от скорости настроено, это обычно не возможно удалить существующую ссылку из контекст через этот механизм. (Заметка что это может быть разрешено путем изменения одна из настроек скорости свойства)

В конфигурации VE по умолчанию есть свойство

directive.set.null.allowed = false

если истина, с правой стороны #set () оператор с недопустимой ссылкой или нулевым значением установит левая сторона к нулю. Если ложь, то левая сторона останется прежней

Измените его на true, используя setProperty() на org.apache.velocity.app.Velocity, и вы готовы к работе.

2 голосов
/ 15 января 2010

Если вы пытаетесь получить переменные области действия, вы можете злоупотребить областью действия, установленной #foreach:

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

#end

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