2009-03-18 11 views
14

È possibile impostare un riferimento velocità su "null" o "undefined"?Disinserimento di una variabile in Velocity

Il Velocity template language reference dice

#set - stabilisce il valore di un riferimento Formato:

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

Usage:

$ref - La LHS della cessione deve essere una variabile riferimento o riferimento di proprietà.

arg - L'RHS del compito, arg viene analizzato se racchiuso tra virgolette doppie e non analizzato se racchiuso tra virgolette singole. Se RHS restituisce null, non viene assegnato all'LHS. (sottolineatura mia)

non riesco a trovare un equivalente #unset macro.

risposta

12

Continuate a leggere ...

A seconda di come Velocity è configurato, generalmente non è possibile per rimuovere un riferimento esistente dal contesto tramite questo meccanismo. (Si noti che questo può essere consentito cambiando una delle configurazioni di Velocity proprietà)

Nel VE configurazione di default ha la proprietà

directive.set.null.allowed = false 

se vero, avendo un lato destro a l'istruzione #set() con un riferimento non valido o un valore nullo imposterà il lato sinistro di su null. Se false, il lato sinistra rimarrà lo stesso

Change a true usando setProperty() su org.apache.velocity.app.Velocity e si è pronti ad andare.

23

È possibile impostare il riferimento su falso. Poiché un riferimento non nullo è considerato vero, è possibile verificare se il riferimento è impostato. Questo è utile nei loop.

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

Dal momento che le variabili di velocità manterrà il vecchio valore, se si tenta di assegnare un "null-valore ", Ho trovato questa soluzione molto carina. Alla fine del ciclo ho appena impostato la variabile su false e quando non puoi assegnare un valore il suo valore sarà falso. – Goot

+0

soluzione alternativa. Grazie :) – Dimitris

1

Se si sta tentando di ottenere le variabili di ambito, si può abusare l'ambito stabilito dalla #foreach:

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

#end 

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