1

我正在尝试创建一个带有“for each”循环的速度模板,就像这样

#foreach ($Key in $!{KeyList})
    #if $Key1Function == something, write something #end
#end 

我希望在KeyFunction迭代循环时更改 的数字。

所以我尝试写$Key$foreach.countFunction,$Key{$foreach.count}Function$Key{$foreach.count}$Function,不出所料,这一切都失败了。

我也尝试过使用#set(在 foreach 循环中),即

#set($a = "KeyFunction")
#set($b = "foreach.count") ##(or velocityCount -- same problem)
#set($c = "$a$b")

但是现在当我检查时,$c我得到KeyFunction1了,当我尝试 $ this (ie $$c) 时,我得到了$KeyFunction1——我无法让 Velocity 再次评估。

我已经尝试#evaluate在各种地方和方式使用,但它似乎没有做任何事情。

编辑-如果它使问题变得更简单,我可以重写$Key1Function$KeyFunction1,这可能需要更少的'$'符号才能工作?

谁能帮我解决这个问题的正确语法?

谢谢

4

2 回答 2

1

评估不返回值。它只是将内容呈现到输出流中。VelocityTools 中的 RenderTool 确实返回值。但为此,您不需要那么大的力量。只需将上下文放入自身:

context.put("ctx", context);

并要求它提供您想要的值,使用插值字符串(双引号)来创建密钥。所以,像这样:

#foreach ($Key in $!{KeyList})
 #if ($ctx.get("$Key${foreach.count}Function") == something) write something #end
#end
于 2012-07-09T21:20:11.997 回答
-1

请参阅http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html#loops,有一个名为 $velocityCount 的变量包含循环计数器,默认从 1 开始。

名称和起始值都可以自定义。

于 2012-07-09T20:10:34.497 回答