2011-09-28 20 views
18

Quiero insertar "continue" dentro de foreach en JSTL. Por favor, avíseme si hay una manera de lograr esto.JSTL continue, break inside foreach

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

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

Quiero insertar el "continuar" dentro de la condición if.

Respuesta

27

No existe tal cosa. Haga lo contrario para el contenido que realmente desea mostrar. Así que no lo

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

sino más bien hacer

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

Tenga en cuenta que me ha solucionado un error de sintaxis EL en su código.

+0

+1 aah - ahora entiendo por qué quería continuar. Buena interpretación de la pregunta BalusC! – CoolBeans

+0

No puedo hacer lo inverso. Porque, hago algunas acciones debajo del lazo. Quería detener eso si pasa esta condición. Quiero ir a la siguiente iteración si pasa esta condición. Gracias por tu respuesta. Trataré de seguir con otra lógica si no hay forma de llegar a la siguiente iteración con continuar. – Nazneen

+0

No dude en editar la pregunta con la lógica concreta. – BalusC

2

O puede usar EL elegir comunicado

<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

voy a responder a la parte de 'break' de su pregunta, ya que las otras respuestas se centran en 'continuar' (que es de hecho imposible) . Esto no es un verdadero 'break', porque todo lo que viene más adelante en el mismo paso de bucle todavía será evaluado, pero se puede acortar el bucle de la siguiente manera:

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

Así que si usted no necesita su descanso para omita algún código, esto aún podría ser útil para usted. Por supuesto, en general es MALO modificar el índice de bucle dentro del bucle, pero está bien.

+0

Intenté este enfoque, pero no funcionó para mí. Lo revisé, y 'status.index' en realidad no fue cambiado después de'

0

Lo resuelto mediante SET al final de mi código ejecutable y el interior del bucle

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

Luego utiliza esa variable para omitir la ejecución del código en la siguiente iteración utilizando

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

se puede establecer a true en cualquier momento ...

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

más en esta etiqueta en: JSTL Core Tag

enjoy!

Cuestiones relacionadas