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.
Ответы
Ответ 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
наслаждайтесь!