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

时间:2015-02-09 21:49:52

标签: java loops foreach velocity

我正在使用以下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),但它不起作用。

3 个答案:

答案 0 :(得分:2)

在将它们传递给velocity之前,在java代码中创建产品块是一个更好的解决方案。我的意思是创建一个包含List<Product>的ProductBlock类,将产品分组到java中的产品块中,将产品块列表传递给速度模板并像消耗它一样

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

我不熟悉Velocity,所以我的语法可能会关闭,但这可以使用for循环而不是forEach来完成:

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