2009-03-18 4 views
14

Est-il possible de définir une référence Velocity sur 'null' ou 'indéfini'?Désactivation d'une variable dans Velocity

Le Velocity template language reference dit

#set - Établit la valeur d'une référence Format:

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

Utilisation:

$ref - Le LHS de la mission doit être une variable référence ou une référence de propriété.

arg - Le RHS de l'assignation, arg est analysé s'il est entre guillemets et non analysé s'il est entouré de guillemets simples. Si le RHS est nul, il n'est pas affecté au LHS. (Souligné par l'auteur)

Je ne peux pas trouver un équivalent #unset macro.

Répondre

12

Lire la suite ...

Selon la vitesse est configuré, il est généralement impossible d'enlever une référence existante de le contexte via ce mécanisme. (Note que cela peut être autorisé en changeant l'une des propriétés de configuration de vitesse )

Dans la VE configuration par défaut a la propriété

directive.set.null.allowed = false 

si cela est vrai, ayant un côté droit de une instruction #set() avec une référence ou une valeur null invalide placera le côté gauche à zéro. Si elle est fausse, le côté gauche restera le même

changement à l'aide truesetProperty() sur org.apache.velocity.app.Velocity et vous êtes prêt à aller.

23

Vous pouvez définir la référence sur false. Comme une référence non nulle est considérée comme vraie, vous pouvez ensuite tester si la référence est définie. Ceci est utile dans les boucles.

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

Puisque les variables de vitesse garderont l'ancienne valeur, si vous essayez d'attribuer une « valeur null ", J'ai trouvé cette solution plutôt sympa. À la fin de la boucle, je mets juste la variable à false et quand vous ne pouvez pas assigner une valeur, sa valeur sera fausse. – Goot

+0

solution de contournement cool. Merci :) – Dimitris

1

Si vous essayez d'obtenir des variables scope, vous pouvez abuser de la portée établie par #foreach:

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

#end 

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