在Velocity中使用foreach.count

时间:2012-07-09 10:57:26

标签: foreach velocity

我正在尝试使用'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(即$$c)时,我得到$KeyFunction1 - 我不能让Velocity再次评估。

我尝试过以各种方式使用#evaluate,但似乎没有做任何事情。

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

任何人都可以帮我解决这个问题的正确语法吗?

由于

2 个答案:

答案 0 :(得分:1)

评估不返回值。它只是将内容呈现到输出流中。 VelocityTools中的RenderTool确实返回值。但为此,你不需要那么多的力量。只需将上下文置于其中:

context.put("ctx", context);

并询问它所需的值,使用插值字符串(双引号)来创建键。所以,像这样:

#foreach ($Key in $!{KeyList})
 #if ($ctx.get("$Key${foreach.count}Function") == something) write something #end
#end

答案 1 :(得分:-1)

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

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