2011-09-28 5 views
18

Voglio inserire "continua" all'interno di foreach in JSTL. Per favore fatemi sapere se c'è un modo per raggiungere questo obiettivo.JSTL continua, rompere all'interno foreach

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

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

Voglio inserire "continua" all'interno della condizione if.

risposta

27

Non esiste una cosa del genere. Basta fare l'inverso per il contenuto che si desidera visualizzare in realtà. Quindi non fare

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

ma piuttosto fare

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

o

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

prega di notare che ho fissato un errore di sintassi EL nel codice pure.

+0

+1 aah - ora capisco perché volesse continuare. Buona interpretazione della domanda BalusC! – CoolBeans

+0

Non posso fare l'inverso. Perché, faccio alcune azioni sotto il ciclo. Volevo smetterla se questa condizione fosse passata. Voglio andare alla prossima iterazione se questa condizione passa. Grazie per la tua risposta. Proverò ad andare con un'altra logica se non c'è modo di farlo alla prossima iterazione con continue. – Nazneen

+0

Sentiti libero di modificare la domanda con la logica concreta. – BalusC

2

Oppure si può usare EL scegliere dichiarazione

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

Risponderò la parte 'break' della tua domanda, dal momento che le altre risposte si concentrano su 'Continua' (che è davvero impossibile) . Questo non è un vero e proprio 'break', perché tutto ciò che viene dopo nella stessa fase del ciclo sarà ancora valutato, ma si può abbreviare il ciclo nel modo seguente:

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

Quindi, se non hai bisogno di tua pausa per saltare un po 'di codice, questo potrebbe comunque esserti utile. Ovviamente in generale è BAD-mkay per modificare l'indice di loop all'interno del ciclo, ma questo va bene.

+0

Ho provato questo approccio, ma non ha funzionato per me. Ho controllato, e 'status.index' non è stato modificato dopo'

0

ho risolto mediante SET al termine del mio codice eseguibile e all'interno del ciclo

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

poi ho usato quella variabile saltare l'esecuzione del codice nella successiva iterazione utilizzando

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

è possibile impostare di nuovo a vero in qualsiasi momento ...

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

più su questa etichetta su: 012.

buon divertimento!