2010-10-07 111 views
13

我想打印递减的数字,如:JSTL c:forEach,递减循环不可能?

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

然后我得到了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) 
    .... 

但这个答案说,这是可能的循环这两种方式:

JSTL forEach reverse order

我怎么了?

+0

另一个问题是关于如何向后循环集合。我纠正了我的答案,所以其他部分也是正确的。你没有任何问题。我的回答有错误。 – Eddie 2013-02-08 04:43:07

回答

24

我不确定其他问题的回答者是如何使其工作的,但是我无法在此处使用参考JSTL实现工作。

无论如何,你可以用以下实现的要求:

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

或者,如果你想避免重复10

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

对,规范指出:如果指定,步骤必须> = 1 – kschneid 2010-10-07 17:14:33

+0

这很好。我不这样想。 – 2012-11-15 10:12:36

1

可能的解决方案,而无需使用var属性:

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

请注意,step也被省略,因为它的默认值是1