2009-03-18 11 views
14

¿Es posible establecer una referencia de velocidad como 'nulo' o 'indefinido'?Desarreglando una variable en Velocity

El Velocity template language reference dice

#set - Establece el valor de un formato de referencia :

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

Uso:

$ref - La LHS de la asignación debe ser una variable referencia o una referencia de propiedad.

arg - El RHS de la asignación, arg se analiza si está entre comillas dobles, y no analizado si está entre comillas simples. Si el RHS se evalúa como nulo, no se le asigna al LHS. (el énfasis es mío)

no puedo encontrar un equivalente #unset macro.

Respuesta

12

leyendo ...

Dependiendo de cómo se configura la velocidad , por lo general no es posible para eliminar una referencia existente de el contexto a través de este mecanismo. (Nota que esto puede ser permitido por el cambio de uno de la configuración de velocidad propiedades)

En el VE configuración por defecto tiene la propiedad

directive.set.null.allowed = false 

si es cierto, tiene un lado de la mano derecha de una declaración #set() con una referencia no válida o un valor nulo establecerá el lado izquierdo en nulo. Si es falso, el lado mano izquierda se mantendrá igual

cambiarlo a true usando setProperty() en org.apache.velocity.app.Velocity y ya está listo para ir.

23

Puede establecer la referencia en falso. Como una referencia no nula se considera verdadera, puede probar si la referencia está establecida. Esto es útil en bucles.

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

Como las variables de velocidad se mantendrá el valor antiguo, si se intenta asignar un "nulo valor ", Encontré esta solución bastante agradable. Al final del ciclo, simplemente configuro la variable como falsa y cuando no puede asignar un valor, su valor será falso. – Goot

+0

buena solución. Gracias :) – Dimitris

1

Si usted está tratando de obtener las variables con ámbito, se puede abusar del ámbito establecido por #foreach:

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

#end 

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