我想知道是否可以动态地将变量名称构造成速度。
即。让我说我有6个变量到速度模板[name1,name2,name3 .. name6]我想输出它们。 所以我正在寻找类似的东西:
#foreach ( $counter in [1..6] )
${name${counter}}
#end
有可能吗?
答案 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