2016-08-05 7 views
0

ich ein Makro in Freemarker haben sagenPassing Parameter Makro Freemarker dynamisch

<#macro printHelloWorld var1 var2> 
    ${var1} 
    ${var2} 
</#macro> 

Als ich dieses Makro als

nennen
<@macro printHelloWorld var1="hello" var2="world" /> 

Es es in der erwarteten Weise druckt
hallo Welt.

Mein Problem ist jedoch, dass ich diese Variablennamen dynamisch übergeben möchte. Ich erhalte die Makroargumente dynamisch von einer Quelle, , und ich möchte sie weiterleiten können. Etwas nach dem Vorbild von

$paramater1 = "var1" 
$parameter2 = "var2" 
$valueForParameter1 = "hello" 
$valueForParameter2 = "world" 

<@macro printHelloWorld paramater1=valueForParameter1 parameter2=valueForParameter2 /> 

die ich entspricht den Aufruf sein will

<@macro printHelloWorld var1="hello" var2="world" /> 

ich nicht in der Lage, um alle Lösungen, um es zu finden. Irgendwelche Tipps ?

Um den Anwendungsfall mehr zu beschreiben,

Wir haben tatsächlich eine Freemarker Makro, über Java Tag ausgesetzt, die in dynamischen Attributen nehmen. Ich möchte in der Lage sein, dieses Makro aufzurufen und ihm die Parameter dynamisch zur Verfügung zu stellen.

Antwort

0

Es gibt keine Sprachfunktion, die das recht macht. Es gibt zwei Möglichkeiten, die etwas ähnliches tun:

  • One einfach ist vorbei einen FTL-Hash (wie ein Map) mit dem Makro, wie <@myMacro params={'a': 1, 'b': 2}/>. In diesem Fall kann der Ausdruck des Parameterwertes auch ein dynamisch in Java erstellter Map sein.

  • die andere ist, die einen Makro wie <#macro myMacro p1 p2 otherParams...>, in welchem ​​Fall in <@myMacro p1=11 p2=22 a=1 b=1/>{'a': 1, 'b': 2} als otherParams passieren. In diesem Fall können Sie jedoch keinen extern erstellten Hash als otherParams übergeben.