2010-10-07 11 views
13

Chcę drukować numery, malejący jak:JSTL c: forEach, niepotrzebna pętla liczb jest niemożliwa?

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

potem mam jsp wyjątek:

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

ale ta odpowiedź mówi, że jest to możliwe do pętli w obie strony:

JSTL forEach reverse order

Co jest ze mną nie tak?

+0

To drugie pytanie dotyczyło przywracania kolekcji w pętli. Poprawiłem odpowiedź, więc druga część również jest poprawna. Nic nie jest z tobą nie tak. Moja odpowiedź była błędna. – Eddie

Odpowiedz

24

Nie jestem pewien, jak odpowiedziałem z drugiego pytania, ale działa, ale nie mogę go uruchomić tutaj z referencyjną implementacją JSTL.

W każdym razie, można osiągnąć wymóg z następujących powodów:

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

Lub jeśli chcesz uniknąć powielania 10:

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

W prawo, stany spec: Jeśli określono, krok musi być> = 1 – kschneid

+0

to dobrze.Nie myślę tak. –

1

możliwe rozwiązanie, bez użycia atrybutu var:

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

Pamiętaj, że step również został pominięty, ponieważ jego domyślną wartością jest 1.