Java Velocity循环每3项添加一个div

Java Velocity循环每3项添加一个div,java,loops,foreach,velocity,Java,Loops,Foreach,Velocity,我正在使用下面的foreach循环 #foreach( $product in $allProducts ) <p>$product</p> #end #foreach($allProducts中的产品) $product #结束 得到 <p>something</p> <p>something</p> <p>something</p> <p>something</p&g

我正在使用下面的foreach循环

#foreach( $product in $allProducts )
    <p>$product</p>
#end
#foreach($allProducts中的产品)
$product

#结束
得到

<p>something</p>
<p>something</p>
<p>something</p>
<p>something</p>
<p>something</p>
<p>something</p>
什么

某物

某物

某物

某物

某物

是否可以在Velocity中每3个项目包装一个div?例如,获得以下结果:

<div>    
<p>something</p>
<p>something</p>
<p>something</p>
</div>
<div>
<p>something</p>
<p>something</p>
<p>something</p>
</div>

某物

某物

某物

某物

某物

某物


我尝试在foreach循环中使用
#if($velocityCount%3==0)
,但不起作用。

我不熟悉Velocity,因此我的语法可能已关闭,但可以使用
for
循环而不是
foreach

<div>
for(int i=0;i<products.size;i++){
    <p>$products[i]</p>
    if(i%3==0){
        </div>
        <div>
    }
}
</div>


对于(int i=0;i,在将产品块传递给velocity之前,最好先用java代码创建产品块。我的意思是创建一个包含
列表的ProductBlock类,用java将产品分组为产品块,将产品块列表传递给velocity模板,然后像这样使用它

#foreach( $productBlock in $allProductBlocks )
    <div>
    #foreach( $product in $productBlock.products )
        <p>$product</p>
    #end
    </div>
#end
#foreach($productBlock中的$productBlock)
#foreach($productBlock.products中的product)
$product

#结束 #结束

这将减少模板逻辑,这通常是一个很好的观点。

您没有告诉我们您使用的是哪个Velocity版本。
$velocityCount
在最新版本中不再存在(至少在1.7.x中)。请尝试使用
$foreach.index

#foreach( $product in $allProducts )
    #if( $foreach.index %3 == 0 )
        #if( !$foreach.first )
        </div>
        #end
    <div>
    #end
    <p>$product</p>
    #if( $foreach.last )
    </div>
    #end
#end
#foreach($allProducts中的产品)
#如果($foreach.index%3==0)
#如果(!$foreach.first)
#结束
#结束
$product

#如果($foreach.last) #结束 #结束
如果您不熟悉Velocity,为什么要回答这个问题?!Velocity中没有indexeu的ad for循环,但您可以访问foreach循环计数器。