2015-02-26 27 views
5

Chcę zaktualizować makro, które jest współużytkowane przez wiele różnych plików .vtl, aby dodać nowy parametr. Jednak chcę tylko zmienić połączenie w jednym z moich plików .vtl i pozostawić pozostałe bez zmian. Tak więc, zasadniczo chcę dodać opcjonalny parametr lub parametr z wartością domyślną, jeśli nie podano parametru.Domyślne wartości parametru makra Apache Velocity

Dokumentacja (here) wspomina o opcjonalnych wartościach domyślnych w sekcji "#macro", ale po kilku godzinach wiercenia się z nimi nie mogę dla całego życia ustalić, jaka jest właściwa składnia.

Więc chcę wziąć istniejącego makra:

#macro(my_macro) 
     oldValue 
    #end 

i przekształcić go w makro jak:

#macro(my_macro $param="oldValue") 
     $param 
    #end 

Gdzie mogę to nazwać właściwie z żadnym z tych dwóch połączeń i uzyskać określone wyjścia:

#my_macro()   => oldValue 
    #my_macro("newValue") => newValue 

Próbowałem każdej permutacji tego, co określono w dokumentacji, ale nie mogę znaleźć niczego, co działa. Czy ktokolwiek zna właściwą składnię? Czy jest jakaś właściwość, której mi brakuje?

Używam Velocity 1.7 i VelocityTools 2.0. Używam też ustawienia velocimacro.arguments.strict=truevelocimacro.arguments.strict=truevelocimacro.arguments.strict=true Nie można jednak łatwo zmienić tej właściwości bez konieczności aktualizacji/ponownego testowania.

Odpowiedz

1

Domyślny parametr też nie działa. Ale można zrobić to obejście:

#macro(my_macro $param) 
    #if(!$param) 
    #set($param = "oldValue") 
    #end 
    $param 
#end 
+0

Tak, skończyło się tą drogą, ale to wymaga mnie do zmiany velocimacro ścisłego właściwość false który tak naprawdę nie chcą robić. Ale cokolwiek, wszystko dobrze się kończy. – LoganBlack