JSTL forEach逆序

Ste*_*Kuo 25 java jsp jstl

使用JSTL的forEach标签,是否可以以相反的顺序迭代?

Edd*_*die 34

当您forEach用于创建整数循环时,您可以前进或后退,但它需要一些工作.事实证明你不能这样做,例如:

<c:forEach var="i" begin="10" end="0" step="-1">
    ....
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

因为规范要求步骤是积极的.但是您始终可以按顺序循环,然后使用<c:var将递增的数字转换为递减的数字:

<c:forEach var="i" begin="0" end="10" step="1">
   <c:var var="decr" value="${10-i}"/>
    ....
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

但是,当您forEach对任何类型的Collection进行处理时,我不知道有任何方法使对象按相反的顺序排列.至少,不是先将元素排序为相反的顺序然后再使用forEach.

forEach通过在JSP中执行以下操作,我已成功按所需顺序导航循环:

<%
List list = (List)session.getAttribute("list");
Comparator comp = ....
Collections.sort(list, comp);
%>


<c:forEach var="bean" items="<%=list%>">
     ...
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

使用合适的Comparator,您可以按任何所需顺序遍历项目.这有效.但我不知道有一种说法,非常简单,以相反的顺序迭代所提供的集合.

  • 就我而言,它是一个集合 (2认同)
  • 或者更好的是,按照它将使用的顺序创建集合.jsps不是数据按摩的好地方. (2认同)

Ian*_*Ian 7

基于Eddie给出的答案,我使用以下代码以相反的顺序迭代集合。

给定一个名为“list”的集合,它存储一个人的列表。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

<%-- Keep a reference to the size of the collection --%>
<c:set var="num_people" value="${fn:length(list)}" />

<%-- Iterate through items. Start at 1 to avoid array index out of bounds --%>
<c:forEach var="i" begin="1" end="${num_people}" step="1">
    <c:set var="person" value="${list[num_people-i]}" />

    ${person.name}<br />
</c:forEach>
Run Code Online (Sandbox Code Playgroud)