2013-06-13 5 views
5

Ich würde gerne wissen, wenn es möglich ist, Name der Variablen in Geschwindigkeit dynamisch zu konstruieren.konstruieren Variablennamen dynamisch in Geschwindigkeit

d. H. Lassen Sie uns sagen, ich habe 6 Variablen in Geschwindigkeit Vorlage [Name1, Name2, Name3 .. Name6] Ich möchte sie ausgeben. Also so etwas wie ich suche:

#foreach ($counter in [1..6]) 
${name${counter}} 
#end 

ist es irgendwie möglich?

Antwort

9

Es ist möglich, mit Hilfe der #evaluate Richtlinie:

#evaluate ('$name1') 

#set ($d = '$') 
#foreach ($i in [1..6]) 
    #set ($varName = "${d}name${i}") 
    #evaluate($varName) 
#end 
+0

danke. nett. Wusste ich nicht. –

+0

@Sergiu Dumitriu Wie man die Ausgabe von 'evaluate' in einem var setzt? –

+0

@AamirAdnan '#set ($ value =" #evaluate ($ varName) ") oder, da Sie jedes gültige Skript auswerten können:' '' #set ($ name1 = 'a1') #set ($ name2 = 'b2') #set (name3 $ = 'c3') #set ($ d = '$') #set (h = '#' $) #foreach ($ i in [1..3]) #set ($ expr = "$ {h} gesetzt ($ {d} wert = $ {d} name $ {i})") #evaluate ($ expr) $! Value #end '' ' –

5

Sie könnten eine Karte erstellen und die Namen der Schlüssel bauen, um die Werte abrufen Sie wollen:

#set($map = {"${name}1":'value1', "${name}2":'value2'}) 

#foreach ($counter in [1..6]) 
    #set($key = "${name}$counter") 
    $map.get(${key}) 
#end 
+0

karte ist gut, danke. –

1

Hier ist ein Trick Geschwindigkeitsvariable mit dynamischem Namen einstellen.

Wenn Sie stimmen Geschwindigkeit Kontext vorher in Java-Code wie folgt verwalten:

VelocityContext context = new VelocityContext(paramsMap); 
context.put("all", paramsMap); 

dann wäre es möglich, dynamische Vars in Vorlage wie folgt zu definieren:

#set($dynamicDef = "varName=varValue") 
#set($dynamicName = $dynamicDef.substring(0, $dynamicDef.indexOf('='))) 
#set($dynamicValue = $dynamicDef.substring($dynamicDef.indexOf('=')).substring(1)) 
## create var with dynamic name 
$all.put($dynamicName, $dynamicValue) 

und nutzen sie später so:

#if ($varName) 
varName=$varName ## prints varName=varValue 
#end