2009-03-18 7 views
14

Kann eine Velocity-Referenz auf 'null' oder 'undefined' gesetzt werden?Eine Variable in Velocity deaktivieren

Die Velocity template language reference sagt

#set - Legt den Wert eines Referenz Format:

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

Verbrauch:

$ref - Die LHS der Zuweisung muss eine Variable sein Referenz oder eine Eigentumsreferenz.

arg - Die RHS der Zuordnung, arg wird analysiert, wenn in Anführungszeichen eingeschlossen, und nicht geparst, wenn in einfache Anführungszeichen eingeschlossen. Wenn der RHS zu Null ausgewertet wird, wird ihm nicht zugewiesen. (Hervorhebung von mir)

ich kein Äquivalent #unset Makro finden kann.

Antwort

12

Lesen Sie weiter ...

Je nachdem, wie Geschwindigkeit wird konfiguriert, ist es in der Regel nicht möglich eine bestehende Referenz von den Kontext über diesen Mechanismus zu entfernen. (Anmerkung dass dies kann durch Änderung eine der Geschwindigkeitskonfiguration Eigenschaften zulässig)

im VE Standardkonfiguration hat die Eigenschaft

directive.set.null.allowed = false 

wenn sie wahr ist, eine rechte Seite, die von Eine #set() -Anweisung mit einem ungültigen Referenz- oder Nullwert setzt die linke Seite auf null. Wenn nicht, bleibt die linke Seite der gleichen

Ändern es zu true mit setProperty() auf org.apache.velocity.app.Velocity und Sie sind bereit zu gehen.

23

Sie können den Verweis auf false setzen. Wenn eine Nicht-Null-Referenz als wahr betrachtet wird, können Sie testen, ob die Referenz gesetzt ist. Dies ist nützlich in Schleifen.

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

Da Geschwindigkeit Variablen den alten Wert halten, wenn Sie versuchen, eine „Null-Wert zuweisen "Ich fand diese Lösung ganz nett. Am Ende der Schleife setze ich die Variable einfach auf false und wenn Sie keinen Wert zuweisen können, ist der Wert falsch. – Goot

+0

cooler Workaround. Vielen Dank :) – Dimitris

1

Wenn Sie scoped Variablen zu bekommen versuchen, können Sie den Umfang von #foreach etablierten Missbrauch:

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

#end 

## localVar will be unset (or returned to previous value) again 
Verwandte Themen