<c:foreach> count不递增

时间:2015-12-17 18:19:37

标签: jsp indexing foreach jstl

我有一个名单列表,如下所示

[{"name": "test1"},
{"name": "test2"},
{"name": "test3"},
{"name": "test4"},
{"name": "test5"},
{"name": "test6"},
{"name": "test7"},
{"name": "test8"},
{"name": "test9"},
{"name": "test10"},
{"name": "test11"},
{"name": "test12"},
{"name": "test13"}]

我想要实现的是像下面所示的for循环,但在jstl中打印每次迭代中的四个值

for(int i=0; i<items.size();i++)
{
    System.out.println(items[i].name);
    System.out.println(items[i++].name);
    System.out.println(items[i++].name);
    System.out.println(items[i++].name);
}

我的jstl代码如下所示,代码有效,但增量在<c:forEach>

内无效
<c:forEach var="value" items="${items}" varStatus="loopCounter">
    <div class="one">{value}</div>
    ${loopCounter+1}
    <div class="two">{value}</div>
    ${loopCounter+1}
    <div class="three">{value}</div>
    ${loopCounter+1}
    <div class="four">{value}</div>
</c:forEach>

任何人都可以告诉我一些解决方案吗

我的预期输出就像thsi

迭代一

<div class="one">test1</div>
<div class="two">test2</div>
<div class="three">test3</div>
<div class="four">test4</div>

迭代二

<div class="one">test5</div>
<div class="two">test6</div>
<div class="three">test7</div>
<div class="four">test8</div>

迭代三

<div class="one">test9</div>
<div class="two">test10</div>
<div class="three">test11</div>
<div class="four">test12</div>

迭代四

<div class="one">test13</div>

1 个答案:

答案 0 :(得分:2)

变量loopCounter(c:forEach标记的varStatus)是一个包含多个属性的对象。其中之一是index(当前迭代循环的从零开始的索引)。您可以使用它来计算所需的css类。

如果要在JSP中使用打印变量:

${value}

{value}

这应该给出你想要的输出:

<c:forEach var="value" items="${items}" varStatus="loopCounter">
    <c:set var="cssClass">
        <c:choose>
            <c:when test="(loopCounter.index % 4) eq 0">
                one
            </c:when>
            <c:when test="(loopCounter.index % 4) eq 1">
                two
            </c:when>
            <c:when test="(loopCounter.index % 4) eq 2">
                three
            </c:when>
            <c:otherwise>
                four
            </c:otherwise>
        </c:choose>
    </c:set>
    <div class="${cssClass}">${value}</div>
</c:forEach>