8

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

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

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

有可能吗?

4

3 回答 3

13

可以使用该#evaluate指令:

#evaluate ('$name1')

#set ($d = '$')
#foreach ($i in [1..6])
  #set ($varName = "${d}name${i}")
  #evaluate($varName)
#end
于 2013-06-14T11:40:22.063 回答
5

您可以构建一个映射并构建键的名称来检索您想要的值:

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

#foreach ( $counter in [1..6] )
    #set( $key = "${name}$counter" )
    $map.get(${key})
#end
于 2013-06-13T10:30:48.313 回答
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
于 2016-05-26T10:21:55.513 回答