web-dev-qa-db-ja.com

JSTLは続行し、foreach内でブレークします

JSTLのforeach内に「continue」を挿入したい。これを達成する方法があれば教えてください。

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

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

If条件内に「continue」を挿入したい。

21
Nazneen

そのようなことはありません。 実際表示したいコンテンツに対して逆の操作を行うだけです。しないでください

<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構文エラーも修正したことに注意してください。

28
BalusC

実行可能コードの最後とループ内でSetを使用して解決しました

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

次に、その変数を使用して、次の反復でコードの実行をスキップします

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

いつでもtrueに戻すことができます...

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

このタグの詳細: JSTL Core Tag

楽しい!

3
Omak Al-Qantara

または、EL chooseステートメントを使用できます

<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>
2
Tom Novosad