突破JSP / JSTL中的forEach循环

问题描述 投票:5回答:1

我有一些具有某些属性的对象的集合。属性只能是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语句。

我进行了很多搜索,但仍然无法弄清楚。预先感谢。

jsp jstl
1个回答
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>

希望我有帮助

© www.soinside.com 2019 - 2024. All rights reserved.