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

发布于 2024-12-26 15:50:43 字数 431 浏览 1 评论 0原文

我的 JSP 包含以下代码片段:

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

“rules”本身是一个 List

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

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

My JSP contains the following snippet:

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

"rules" itself is a List<Rule>.

When I pass my ModelAndView object back from my Spring MVC Controller, I can see that my List is in the correct order.

However, when it is then rendered on screen, the ordering is somewhat random. I also have JavaScript that performs some modifications on the DOM, but I don't see this doing any reordering.
Therefore, I am wondering if c:forEach is the culprit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

逆夏时光 2025-01-02 15:50:43

我打赌 在大多数实现中使用Iterator,因此它依赖于底层集合顺序。因此,如果您传递List,则顺序被保留,而对于Set来说则不然。

尽管文档没有说明:

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

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

I bet <c:forEach/> uses an Iterator in most implementations, therefore it relies on underlying collection order. Thus if you pass List, the order will be preserved, which is not true for Sets.

Although the documentation does not state that:

items [...] Collection of items to iterate over.

Think about it - if the order of ordered collection was not preserved, any server-side sorting of results wouldn't have sense.

南街女流氓 2025-01-02 15:50:43

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

Iteration will depend on the type of List passed. So you'll have to check the docs of that type of List.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文