【问题标题】:Java Velocity loop add div around every 3 itemsJava Velocity 循环每 3 个项目添加 div
【发布时间】:2015-02-09 21:49:51
【问题描述】:

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

【问题讨论】:

    标签: java loops foreach velocity


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 如果您不熟悉 Velocity,为什么要回答这个问题?!在 Velocity 中没有 indexeu 有广告 for 循环,但您可以访问 foreach 循环计数器。