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