2015-02-26 7 views
5

Ich möchte ein Makro aktualisieren, das zwischen mehreren verschiedenen .vtl-Dateien geteilt wird, um einen neuen Parameter aufzunehmen. Ich möchte jedoch nur den Aufruf in einer meiner .vtl-Dateien ändern und die anderen unverändert lassen. Daher möchte ich im Wesentlichen einen optionalen Parameter oder einen Parameter mit einem Standardwert hinzufügen, wenn kein Parameter angegeben ist.Apache Velocity-Makro-Standardparameterwerte

Die Dokumentation (here) erwähnt optionale Standardwerte in der "#macro" -Abschnitt, aber nach ein paar Stunden des Zappelns mit ihnen kann ich nicht für das Leben von mir herauszufinden, was die richtige Syntax ist.

Deshalb möchte ich das bestehende Makro nehmen:

#macro(my_macro) 
     oldValue 
    #end 

und es in einem Makro wie:

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

Wo ich es richtig mit einem dieser beiden Anrufe nennen könnte und erhalten die angegebene Ausgänge:

Ich habe versucht jede Permutation von was in der Dokumentation angegeben ist, aber kann nichts finden, was funktioniert. Kennt jemand die richtige Syntax? Gibt es möglicherweise eine Eigenschaft, die ich vermisse?

Ich verwende Velocity 1.7 und VelocityTools 2.0. Ich verwende auch die Einstellung velocimacro.arguments.strict=true , wenn das wichtig ist. Allerdings kann ich diese Eigenschaft nicht ohne eine Reihe von Updates/Tests ändern.

Antwort

1

Default-Parameter ist nicht ich auch arbeiten. Aber Sie können diese Abhilfe tun:

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

Ja, landete ich diesen Weg gehen, aber es erforderlich mir die velocimacro strenge Eigenschaft auf false zu ändern, die ich nicht wirklich tun will. Aber was auch immer, alles ist gut, das endet gut. – LoganBlack