A desactivação uma variável no Velocity
Pergunta
É possível definir uma referência de velocidade para 'null' ou 'indefinido'?
O href="http://velocity.apache.org/engine/devel/vtl-reference-guide.html" rel="noreferrer"> referência da linguagem diz
#set
- Estabelece o valor de referência Formato:
# [ { ] set [ } ] ( $ref = [ ", ' ]arg[ ", ' ] )
Uso:
$ref
-. Os LHS da atribuição deve ser uma referência variável ou uma referência de propriedade
arg
- O RHS do trabalho, arg é analisado se entre aspas, e não analisado se entre aspas simples. Se o RHS é avaliada como nula, não é atribuído às LHS. (grifo meu)
Não consigo encontrar uma macro #unset
equivalente.
Solução
Leia em ...
Dependendo de como Velocity é configurado, que geralmente não é possível para remover uma referência existente o contexto através deste mecanismo. (Nota que isso pode ser permitido pela mudança uma configuração da Velocidade Propriedades)
Na configuração padrão VE tem a propriedade
directive.set.null.allowed = false
Se for verdade, ter um lado direito de um #set () declaração com uma referência ou nulo valor inválido irá definir o lado esquerdo para null. Se for falso, o lado esquerdo vai ficar na mesma
Alterar-lo para true
usando setProperty()
em org.apache.velocity.app.Velocity
e você está pronto para ir.
Outras dicas
Você pode definir a referência ao falso. Como uma referência não nulo é considerado verdadeiro, então você pode testar se a referência é definido. Isso é útil em loops.
#foreach ($obj in $list) #set ($x = false) #set ($x = $obj.maybeNull()) #if ($x) ... $x #end #end
Se você está tentando obter variáveis ??de escopo, você pode abusar do escopo estabelecido pela #foreach
:
#foreach($localVar in [ 'theValue'])
#end
## localVar will be unset (or returned to previous value) again