Сброс переменной в 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