JSTL forEach逆序

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

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

  ....  

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

   ....  

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

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

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

使用合适的比较器,您可以按任何所需顺序循环项目。 这很有效。 但我不知道有一种说法,非常简单,以相反的顺序迭代所提供的集合。

您还可以考虑滚动一个自定义JSTL函数,该函数返回列表的反向副本,由以下内容支持:

 public static  List reverse(List list) { List copy = Collections.emptyList(); Collections.copy(copy, list); Collections.reverse(copy); return copy; } 

不适用于集合,但正如另一个答案中所提到的,对于某些集合,排序的概念有点模糊。

基于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 --%>  <%-- Iterate through items. Start at 1 to avoid array index out of bounds --%>   ${person.name}

我们可以用一点技巧来做到这一点: –

     

OutPut将是: – 10 9 8 7 6 5 4 3 2 1

您可以在将其添加到模型之前撤消该集合 。

这也意味着您无需在视图层中执行任何操作即可满足您的要求。