如何在Velocity foreach循环中获得从零开始的计数

我试图在Velocity #foreach指令中获得一个从零开始的计数器。

如果我使用:

 #foreach ($item in $list) item.getName() : $velocityCount #end 

我会得到:

 Fred : 1 Wilma : 2 Barney : 3 

但是我需要:

 Fred : 0 Wilma : 1 Barney : 2 

从速度模板的角度来看,解决方案必须尽可能简单。

编辑
我可以用:

 #foreach ($item in $list) #set( $num = $velocityCount - 1 ) //The white space in mandatory item.getName() : $num #end 

它的工作原理。 但我正在寻找更优雅的解决方案。

编辑2
我也需要基于单一的计数器。 也就是说,在同一模板中,我很可能会有一个#foreach指令需要一个基于零的计数器和另一个需要一个基本计数器的#foreach指令。

如果您使用的是Velocity 1.7,则循环内部可以使用$foreach.index (基于0)和$foreach.count (基于1)特殊变量。

$velocityCount是很久以前被弃用的东西。

 #set($i = 0) #foreach($str in $names) #set($i = $i+1) $i : $str #end 

好吧,你不能同时拥有这两者 – 你要么只是在显示时要做数学计算,要么创建一个自定义指令 ( 这里是SOpost链接到的文章 )。 例如,您可以拥有#forEachZeroBased#forEachOneBased

自定义指令有时是非常有用的,虽然IMO不是其中之一 – 只是做数学,这是显而易见的解决方案,它只是没有那么大的交易。

根据文档 ,您可以指定:

 directive.foreach.counter.initial.value = 0 

在velocity.properties文件中。