以速度动态构造变量名

时间:2013-06-13 10:16:20

标签: velocity

我想知道是否可以动态地将变量名称构造成速度。

即。让我说我有6个变量到速度模板[name1,name2,name3 .. name6]我想输出它们。 所以我正在寻找类似的东西:

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

有可能吗?

3 个答案:

答案 0 :(得分:10)

可以使用#evaluate指令:

#evaluate ('$name1')

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

答案 1 :(得分:5)

您可以构建一个地图并构建键的名称以检索所需的值:

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

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

答案 2 :(得分:1)

这是一个用动态名称设置力度变量的技巧。

如果您设法预先在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