Строить имена переменных динамически по скорости
Я хотел бы знать, можно ли динамически построить имя переменной в скорости.
т.е. допустим, у меня есть 6 переменных в скоростном шаблоне [name1, name2, name3 .. name6] Я хотел бы вывести их. Так что я смотрю что-то вроде:
#foreach ( $counter in [1..6] )
${name${counter}}
#end
это возможно как-то?
3 ответа
Решение
Это возможно с помощью #evaluate
директива:
#evaluate ('$name1')
#set ($d = '$')
#foreach ($i in [1..6])
#set ($varName = "${d}name${i}")
#evaluate($varName)
#end
Вы можете создать карту и имена ключей, чтобы получить нужные значения:
#set( $map = {"${name}1":'value1', "${name}2":'value2'} )
#foreach ( $counter in [1..6] )
#set( $key = "${name}$counter" )
$map.get(${key})
#end
Вот трюк для установки переменной скорости с динамическим именем.
Если вам удастся заранее настроить контекст скорости в Java-коде, например:
VelocityContext context = new VelocityContext(paramsMap);
context.put("all", paramsMap);
тогда можно было бы определить динамические переменные в шаблоне следующим образом:
#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