Java 速度循环每 3 个项目添加 div

Java Velocity loop add div around every 3 items

我正在使用以下 foreach 循环

#foreach( $product in $allProducts )
    <p>$product</p>
#end

获得

<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>

最好在 java 代码中创建乘积块,然后再将它们传递给 velocity。我的意思是创建一个包含 List<Product> 的 ProductBlock class,将产品分组到 java 中的产品块,将产品块列表传递给速度模板并像

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

它会导致更少的模板逻辑,这通常是一个好点。

您没有告诉我们您使用的是哪个 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