JSTL forEach 反向顺序
使用JSTL的标签,是否可以以相反的顺序进行迭代?forEach
当您 使用 创建整数循环时,可以前进或后退,但这需要一些工作。事实证明你不能这样做,例如:forEach
<c:forEach var="i" begin="10" end="0" step="-1">
....
</c:forEach>
因为规范要求步骤是正数。但是,您始终可以按正向顺序循环,然后用于将递增的数字转换为递减数字:<c:var
<c:forEach var="i" begin="0" end="10" step="1">
<c:var var="decr" value="${10-i}"/>
....
</c:forEach>
但是,当您对任何类型的集合进行操作时,我不知道有任何方法可以使对象以相反的顺序排列。至少,首先将元素排序为相反的顺序,然后使用 .forEach
forEach
通过在 JSP 中执行如下操作,我已成功按所需顺序导航循环:forEach
<%
List list = (List)session.getAttribute("list");
Comparator comp = ....
Collections.sort(list, comp);
%>
<c:forEach var="bean" items="<%=list%>">
...
</c:forEach>
使用合适的比较器,您可以按任何所需的顺序循环访问项目。这有效。但是我不知道有一种方法可以非常简单地说,以相反的顺序迭代所提供的集合。
基于 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>