Строить имена переменных динамически по скорости

Я хотел бы знать, можно ли динамически построить имя переменной в скорости.

т.е. допустим, у меня есть 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
Другие вопросы по тегам