JSP / JSTL设置标记和循环

时间:2014-02-28 14:13:17

标签: jsp jstl

我在JSP页面中遇到了一些问题。我试图循环一组项目,并进行比较以确保我正在查看的当前值与先前的值不同。代码如下所示:

<c:set var="previousCustomer" value=""/>
<c:forEach items="${customerlist}" var="customer" varStatus="i">
   <c:choose>
      <c:when test="${(customer.account) != (previousCustomer)}">
         [do some stuff]
      </c:when>                         
      <c:otherwise>
         [do other stuff]
      </c:otherwise>
   </c:choose>
  <c:set var="previousCustomer" value="${customer.account}"/>
</c:forEach>

但是,当我写出值时,previousCustomer在设置为customerlist.account后总是返回与customerlist.account相同的值。有没有办法检查循环中项目的当前值与先前的值?

1 个答案:

答案 0 :(得分:0)

您可以使用varStatus属性和EL括号表示法

<c:forEach items="${customerlist}" var="customer" varStatus="i">
  <c:choose>
    <c:when test="${not i.first and customerlist[i.index] eq customerlist[i.index - 1]}">
      [do some stuff]
    </c:when>                         
    <c:otherwise>
      [do other stuff]
    </c:otherwise>
  </c:choose>
</c:forEach>

因此,使用varStatus first属性检查您是否正在进行第一次迭代(因为没有先前的对象):

not i.first

然后根据varStatus index属性进行比较

customerlist[i.index] eq customerlist[i.index - 1]

如果您确定列表中有更多项目,则可以使用begin="1"中的c:forEach跳过列表中的第一项。