2010-10-07 16 views
13

Quiero imprimir los números de decrecimiento como:JSTL c: forEach, lazo de número decremental imposible?

<c:forEach var="i" begin="10" end="0" step="-1"> 
    ... ${i} ... 
</c:forEach> 

Entonces tuve excepción jsp:

javax.servlet.jsp.JspTagException: 'step' <= 0 
    javax.servlet.jsp.jstl.core.LoopTagSupport.validateStep(LoopTagSupport.java:459) 
    org.apache.taglibs.standard.tag.rt.core.ForEachTag.setStep(ForEachTag.java:60) 
    .... 

pero esta respuesta dice que es posible bucle en ambos sentidos:

JSTL forEach reverse order

¿Qué pasa conmigo?

+0

Esa otra pregunta era realmente acerca de cómo recorrer una colección hacia atrás. Corregí mi respuesta por lo que la otra parte también es correcta. No hay nada malo contigo Mi respuesta tuvo un error. – Eddie

Respuesta

24

No estoy seguro de cómo funciona el contestador de la otra pregunta, pero no puedo hacerlo funcionar aquí con la implementación JSTL de referencia.

De todos modos, se puede lograr con el requisito siguiente:

<c:forEach var="i" begin="0" end="10" step="1"> 
    ... ${10 - i} ... 
</c:forEach> 

O si desea evitar la duplicación de 10:

<c:forEach var="i" begin="0" end="10" step="1" varStatus="loop"> 
    ... ${loop.end - i + loop.begin} ... 
</c:forEach> 
+2

Derecha, la especificación indica: Si se especifica, el paso debe ser> = 1 – kschneid

+0

eso es bueno. No pienso así. –

1

Una solución posible, sin necesidad de utilizar el atributo var:

<c:forEach begin="0" end="10" varStatus="loop"> 
    ${loop.end - loop.count + 1} 
</c:forEach> 

Tenga en cuenta que step se omite también, porque su valor predeterminado es 1.