2013-06-13 11 views
5

Chciałbym wiedzieć, czy możliwe jest dynamiczne konstruowanie nazwy zmiennej na prędkość.konstruuj nazwy zmiennych dynamicznie w prędkości

tzn. Powiedzmy, że mam 6 zmiennych w szablonie prędkości [nazwa1, nazwa2, nazwa3 .. nazwa6] Chciałbym je wyprowadzić. Więc szukam w coś takiego:

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

to możliwe w jakiś sposób?

Odpowiedz

9

Jest to możliwe za pomocą dyrektywy #evaluate:

#evaluate ('$name1') 

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

dzięki. miły. nie wiedział tego. –

+0

@Sergiu Dumitriu Jak umieścić wyjściowy "oceniać" w var? –

+0

@AamirAdnan '#set ($ value =" #evaluate ($ varName) ")' lub, ponieważ możesz ocenić dowolny poprawny skrypt: '' '#set ($ name1 = 'a1') #set ($ name2 = 'b2') #set ($ name3 = 'c3') #set ($ d = '$') #set ($ h = '#') #foreach ($ i w [1..3]) #set ($ expr = "zestaw $ {h} ($ {d} wartość = $ {d} nazwa $ {i})") #ocena ($ expr) $! Wartość #end '' ' –

5

Można skonstruować mapę i budować nazwy kluczy do pobierania wartości chcesz:

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

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

mapa jest w porządku, dzięki. –

1

Oto sztuczka ustaw zmienną prędkości z nazwą dynamiczną.

Jeśli uda się dostroić kontekście prędkości wcześniej w kodzie java tak:

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

wtedy byłoby możliwe określenie dynamicznych vars w szablonie tak:

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

i wykorzystać je później tak:

#if ($varName) 
varName=$varName ## prints varName=varValue 
#end 
Powiązane problemy