2010-10-07 107 views
13

Tôi muốn in số decremental như:JSTL c: forEach, số vòng lặp giảm dần không thể?

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

sau đó tôi nhận được ngoại lệ 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) 
    .... 

nhưng câu trả lời này cho biết nó có thể để lặp trong cả hai cách:

JSTL forEach reverse order

Có gì sai với tôi?

+0

Câu hỏi khác đó thực sự là về cách lặp lại một Bộ sưu tập về phía sau. Tôi đã sửa câu trả lời của mình để phần khác cũng chính xác. Không có gì là sai với bạn. Câu trả lời của tôi có một sai lầm. – Eddie

Trả lời

24

Tôi không chắc người trả lời câu hỏi khác đã làm việc như thế nào, nhưng tôi không thể làm cho nó hoạt động ở đây với việc triển khai JSTL tham chiếu.

Dù sao, bạn có thể đạt được yêu cầu với sau:

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

Hoặc nếu bạn muốn tránh trùng lặp của 10:

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

Phải, trạng thái thông số: Nếu được chỉ định, bước phải> = 1 – kschneid

+0

tốt. Tôi không nghĩ như thế này. –

1

Một giải pháp có thể, mà không cần sử dụng thuộc tính var:

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

Lưu ý rằng step cũng bị bỏ qua vì giá trị mặc định của nó là 1.

Các vấn đề liên quan