2009-03-18 10 views
14

Czy można ustawić odwołanie do prędkości na "null" lub "undefined"?Odzbrajanie zmiennej w Velocity

Velocity template language reference mówi

#set - Określa wartość referencyjna format:

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

Zastosowanie:

$ref - LHS od przypisania musi być zmienną odwołanie lub odwołanie do właściwości.

- RHS przypisania, argument jest analizowany, jeśli jest ujęty w cudzysłów, a nie analizowany, jeśli jest ujęty w pojedyncze cudzysłowy. Jeśli ocena RHS ma wartość NULL, nie jest przypisywana do LHS jako . (podkreślenie moje)

Nie mogę znaleźć równoważnego makro #unset.

Odpowiedz

12

Czytaj dalej ...

zależności od sposobu Velocity jest skonfigurowany, to zwykle nie jest możliwe usunąć istniejący odwołanie od kontekst poprzez ten mechanizm. (Uwaga że to może być dozwolone przez zmianę jednego z konfiguracją Velocity właściwości)

W VE domyślnej konfiguracji ma własność

directive.set.null.allowed = false 

Jeśli to prawda, posiadające stronę prawicy Instrukcja #set() z nieprawidłowym odwołaniem lub wartością pustą ustawi lewą stronę na na wartość null. Jeśli false, strona lewa ręka pozostanie taki sam

go zmienić na true użyciu setProperty() na org.apache.velocity.app.Velocity i jesteś gotowa do pracy.

23

Możesz ustawić odniesienie na fałsz. Jako odniesienie niepuste uważa się za prawdziwe, można następnie sprawdzić, czy odniesienie jest ustawione. Jest to przydatne w pętlach.

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

Ponieważ zmienne prędkości będzie zachować starą wartość, jeśli starają się przypisać „zerową wartość ", Znalazłem to rozwiązanie całkiem miłe. Na końcu pętli ustawiam zmienną na false i gdy nie możesz przypisać wartości, jej wartość będzie fałszywa. – Goot

+0

fajne obejście. Dzięki :) – Dimitris

1

Jeśli próbujesz uzyskać zmienne lunetą, można nadużywać zakres ustanowiony przez #foreach:

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

#end 

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