2013-06-13 23 views
5

我想知道是否可以動態地將變量的名稱構建爲速度。以速度動態構造變量名稱

即可以說我有6個變量到velocity模板[name1,name2,name3 .. name6]我想輸出它們。 所以我在尋找類似:

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

是否有可能以某種方式?

回答

9

它使用#evaluate指令是可能的:

#evaluate ('$name1') 

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

謝謝。不錯。不知道。 –

+0

@Sergiu Dumitriu如何把'evaluate'的輸出放在var中? –

+0

@AamirAdnan'#set($ value =「#evaluate($ varName)」)'或者因爲您可以評估任何有效的腳本:'#set($ name1 ='a1') #set($ name2 = '$ b3') #set($ name3 ='c3') #set($ d ='$') #set($ h ='#') #foreach($ i in [1..3] ) #set($ expr =「$ {h} set($ {d} value = $ {d} name $ {i})」) #evaluate($ expr) $!value #end ''' ' –

5

您可以構建一個地圖,並建立了鍵的名稱來檢索所需的值:

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

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

地圖是好的,謝謝。 –

1

這裏有一個竅門用動態名稱設置速度變量。

如果你能調整速度方面事先在這樣的Java代碼:

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

那麼就可以定義模板動態VAR是這樣的:

#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) 

,並在以後使用它們像這樣:

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