2010-10-07 7 views
13

Voglio stampare i numeri decrementali come:JSTL c: per ogni ciclo di numeri decrementale impossibile?

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

poi mi sono un'eccezione 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) 
    .... 

ma questa risposta dice che è possibile ciclo in entrambi i modi:

JSTL forEach reverse order

Cosa c'è di sbagliato in me?

+0

L'altra domanda riguardava davvero come eseguire il loop su una raccolta all'indietro. Ho corretto la mia risposta in modo che anche l'altra parte sia corretta. Non hai niente che non va. La mia risposta ha avuto un errore. – Eddie

risposta

24

Non sono sicuro di come il rispondente dell'altra domanda ha funzionato, ma non riesco a farlo funzionare qui con l'implementazione JSTL di riferimento.

Ad ogni modo, è possibile ottenere la condizione per quanto segue:

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

O se si desidera evitare la duplicazione degli 10:

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

A destra, la specifica afferma: Se specificato, il passo deve essere> = 1 – kschneid

+0

questo è buono.Non penso in questo modo. –

1

Una possibile soluzione, senza usare l'attributo var:

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

Si noti che step è omesso anche perché il suo valore predefinito è 1.