Сброс переменной в Velocity

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

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

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

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

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

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

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

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

Ответы

Ответ 1

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

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

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

directive.set.null.allowed = false

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

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

Ответ 2

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

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

Ответ 3

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

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

#end

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