在JSP / JSTL中打破forEach循环

时间:2014-02-22 11:54:59

标签: jsp jstl

我有一些具有一些属性的对象。属性只能是Type1Type2两种类型。

我想要做的就是检查一个对象是否具有Type1的属性。

我正在使用以下代码:

<c:set var="properties" value="${obj.getProperties()}"/>
<c:set var="hasPropertyOfType1" value="false"/>
<c:forEach var="i" begin="0" end="${fn:length(properties) - 1}">
    <c:if test="${properties.get(i).isOfType1() eq true}">
        <c:set var="hasPropertyOfType1" value="true"/>
    </c:if>
</c:forEach>

上面的代码达到了我想要的效果,但效率非常低,因为对象可能具有的属性数量很高。

所以我的问题是,如果我将hasPropertyOfType1设置为true,那么如何摆脱forEach循环。

我想到的一些方法,我不知道如何实现(或者它们甚至是可能的):

1:向forEach循环添加一个条件,这将停止循环。
2:将循环内的索引值增加到大于fn:length(properties)的值 3:如果可能,请使用break语句。

我已经搜索了很多但仍未能解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

JSTL标记用于遍历集合。 它不是要搜索集合。

您还可以将<c:choose><c:when><c:otherwise>一起使用 这是一个例子。 您也可以使用很多

<c:forEach 
      var="List"
      items="${requestScope.DetailList}" 
      varStatus="counter"
      begin="0">

      <c:choose>
         <c:when test="${List.someType == 'aaa' || 'AAA'}">
           <!-- continue -->
         </c:when>
         <c:otherwise>
            Do something...     
         </c:otherwise>
      <c:choose>
    </c:forEach>

希望我有帮助