2012-12-14 7 views
5

Prędkość wystarczy wydrukować nazwę znacznika, jeśli nie znaleziono wartości w VelocityContext, tj. $ Nazwa w moim pliku szablonu, ale w VelocityContext nie ma wartości "nazwa", więc wydrukowano tylko "$ name". Chcę, aby Velocity wydrukowało wartość domyślną, jeśli nie ma wartości dla zmiennej, po prostu próbowałem rozszerzyć AbstractCotnext i przesłonić metodę internalGet(), ale zwracana wartość internalGet() będzie rzutowana na obiekt Node, nie wiem jak stworzyć nowy obiekt węzła w mojej wewnętrznej metodzieGet(), a także myślę, że w ten sposób jest bardzo skomplikowany.Czy Velocity może ustawić wartość domyślną dla zmiennej, gdy nie znaleziono wartości w VelocityContext?

Czy istnieje prosty sposób na ustawienie wartości domyślnej (wartość domyślna to tylko ciąg)?

dzięki.

Odpowiedz

16

Nie łatwo dla wszystkich zmiennych o ile dobrze widzę, tylko udało się to zrobić dla niektórych zmiennych konkretnie, co następuje:

Szablon:

#if (!$somevar) 
#set ($somevar = "mycontent") 
#end 

Var is: $somevar 

Wynik:

Var is: mycontent 
-1

Istnieje kilka rzeczy, które można zrobić, nie łamiąc wewnętrznych elementów Velocity. Spójrz na this question.

2

Google za Velocity ReferenceInsertionEventHandler, aby uzyskać szerszy sposób.

Rozważmy metodę indywidualnych przypadkach DisplayTool na alt() (część projektu VelocityTools)

+0

dzięki każde ciało każdy dużo, i pozwól mi zadać kolejne pytanie: czy jest jakiś sposób, aby przed zmienić nazwę zmiennej renderowanie wyjście? na przykład nazwa zmiennej to userName w pliku szablonu, ale w VelocityContext klucz to USERNAME, chcę zmienić nazwę zmiennej na słowo kluczowe przed renderowaniem. – hiway

6

Tworzenie velocimacro w szablonie:

#macro(defaultValue $parm) 
#if (!$!parm || $!parm == "") 
i-like-will 
#else 
$parm 
#end 
#end 

i nazywają to jak to w tym samym szablonie:

#defaultValue($name) 

Sprawdź Apache Velocity - Velocity User Guide, aby uzyskać więcej informacji na temat velocimacros (i ogólnie prędkości).

+1

dlaczego masz \ symbole przed swoimi #s? Myślałem, że makra i jeśli stwierdzenia były zdefiniowane jako #macro i #if nie \ #if –

+0

Masz rację, nie jestem pewien, w jaki sposób formatowanie zostało skompromitowane.Naprawiłem to. –

+0

Dzięki, pomyślałem, że ma jakieś specjalne znaczenie, które mi brakowało :-) –

0

Nieco spóźniony na imprezę, ale można również wykonać sprawdzenie podczas definiowania zmiennej. Miałem do kompresji to na jednej linii, aby usunąć nadmiar miejsca na wyjściu, ale tutaj jest przykład z jednej z moich projektów:

#set ($qlDefault = "qlinks") 
#set ($qlClass = "#if($sharedCtaImage.getChild('path').value != '/')$qlDefault#else$qlDefault full#end") 

domyślna klasa jest zdefiniowana, a następnie sprawdzić, czy inny, specyficzny stosunek jest wypełnione aby ustalić, czy zachowam domyślną klasę lub dołączam dodatkową klasę. Może to również działać w celu wymiany klas.

Powiązane problemy