JSTL:c:forEach是否保证JSP中的列表排序?

时间:2012-01-12 17:42:36

标签: java jsp foreach jstl

我的JSP包含以下代码段:

<c:forEach items="${rulesForm.rules}" var="rule" varStatus="counter">
        <tr id="rules${counter.index}" name="rules[${counter.index}]">

“规则”本身是List<Rule>

当我从我的Spring MVC控制器传回ModelAndView对象时,我可以看到我的列表的顺序正确。

然而,当它在屏幕上呈现时,排序有些随机。我也有JavaScript在DOM上执行一些修改,但我没有看到这做任何重新排序。 因此,我想知道c:forEach是否是罪魁祸首?

2 个答案:

答案 0 :(得分:3)

我敢打赌<c:forEach/>在大多数实现中使用Iterator,因此它依赖于底层集合顺序。因此,如果您通过List,则保留,而Set则不然。

虽然文档没有说明:

  

items [...]要迭代的项目集合。

考虑一下 - 如果没有保留有序集合的顺序,任何服务器端的结果排序都没有意义。

答案 1 :(得分:0)

迭代将取决于传递的List的类型。因此,您必须查看该类型List的文档。