Подтвердить что ты не робот

JSTL продолжается, перерыв внутри foreach

Я хочу вставить "продолжить" внутри foreach в JSTL. Пожалуйста, дайте мне знать, если есть способ достичь этого.

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

  <c:if test="${List.someType == 'aaa' || 'AAA'}">
    <<<continue>>>
  </c:if>

Я хочу вставить "продолжить" внутри условия if.

4b9b3361

Ответ 1

Нет такой вещи. Просто сделайте инверсию для содержимого, которое вы действительно хотите отобразить. Поэтому не делайте

<c:forEach items="${requestScope.DetailList}" var="list">
    <c:if test="${list.someType eq 'aaa' or list.someType eq 'AAA'}">
        <<<continue>>>
    </c:if>
    <p>someType is not aaa or AAA</p>
</c:forEach>

а скорее

<c:forEach items="${requestScope.DetailList}" var="list">
    <c:if test="${not (list.someType eq 'aaa' or list.someType eq 'AAA')}">
        <p>someType is not aaa or AAA</p>
    </c:if>
</c:forEach>

или

<c:forEach items="${requestScope.DetailList}" var="list">
    <c:if test="${list.someType ne 'aaa' and list.someType ne 'AAA'}">
        <p>someType is not aaa or AAA</p>
    </c:if>
</c:forEach>

Обратите внимание, что я исправил также синтаксическую ошибку EL в вашем коде.

Ответ 2

Я отвечу на вопрос "перерыв" вашего вопроса, так как другие ответы сосредоточены на "продолжении" (что действительно невозможно). Это не настоящий "перерыв", потому что все, что приходит позже на одном и том же шаге цикла, будет по-прежнему оценено, но вы можете сократить цикл следующим образом:

<c:forEach var="apple" items="${apples}" varStatus="status">
    <c:if test="${apple eq pear}">
        ...do stuff with this apple...
        <c:set var="status.index" value="${items.size}"/> <%-- 'break' out of loop --%>
        ... stuff here will still be evaluated...
    </c:if>
    ... stuff here will still be evaluated...
</c:forEach>

Итак, если вам не нужен ваш перерыв, чтобы пропустить какой-то код, это может быть полезно для вас. Конечно, в общем случае BAD-mkay модифицирует индекс цикла внутри цикла, но это нормально.

Ответ 3

Или вы можете использовать инструкцию EL выбрать

<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>

Ответ 4

Я решил это, используя Set в конце моего исполняемого кода и внутри цикла

<c:set var="continueExecuting" scope="request" value="false"/>

то я использовал эту переменную, чтобы пропустить выполнение кода в следующей итерации, используя

<c:if test="${continueExecuting}">

вы можете установить его обратно в true в любое время...

<c:set var="continueExecuting" scope="request" value="true"/>

подробнее об этом теге: Основной тег JSTL

наслаждайтесь!