用JSTL的输出LinkedHashMap的内容,顺序为何是打乱的?

OctopusThu 2008-12-18 09:19:13
首先用Spring的JdbcTemplate从表(视图)中读出数据(返回一个java.util.List),然后把数据装进一个LinkedHashMap,最后在JSP页面中通过<c:forEach>输出。可是现在的问题是:有的时候<c:forEach>的输出顺序与表(视图)的默认顺序不符(有的时候是相符的)。代码片段如下:


LinkedHashMap kvMap = new LinkedHashMap();
jt = new JdbcTemplate(dataSource);
sql = "select " + column + " from " + table;
List list = jt.queryForList(sql);
if (list.size() > 0) {
for (Iterator it = list.iterator(); it.hasNext();) {
ListOrderedMap entity = (ListOrderedMap) it.next();
kvMap.put((String) entity.getValue(0), (String) entity.getValue(1));
}


把kvMap传递给JSP的PageContext,然后在页面取出:


<select name ="xxx">
<c:forEach var="map" items="${kvMap}">
<option value=<c:out value = "${kvMap.key}" /> > <c:out value = "${kvMap.value}" /> </option>
</c:forEach>
</select>


最后,select框中的选项顺序与表(视图)中的顺序不符。不知道问题出在了什么地方?
...全文
481 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
ListOrderedMap entity = (ListOrderedMap) it.next();
System.out.println(entity.getValue(0) + " --> " + entity.getValue(1));
kvMap.put((String) entity.getValue(0), (String) entity.getValue(1));

你加一句红色的那个代码,再与 c:forEach 遍历出来的对比一下就能看出顺序是否是一致的了。

如果是一致的,那问题就不在这里了。
OctopusThu 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]
LinkedHashMap 是有序的散列 Map,迭代的顺序与 put 时的顺序是一致的,不会出现你所说的那种情况,
你可以在 put 那句之前将从 Entity 中取出的 key 输出一下,与用 c:forEach 的顺序是一致的。
[/Quote]

那问题到底出在哪儿了呢...
  • 打赏
  • 举报
回复
LinkedHashMap 是有序的散列 Map,迭代的顺序与 put 时的顺序是一致的,不会出现你所说的那种情况,
你可以在 put 那句之前将从 Entity 中取出的 key 输出一下,与用 c:forEach 的顺序是一致的。
lanzhengwu 2008-12-18
  • 打赏
  • 举报
回复
你 SQL语句中order啊 。。普通LIST输出就好了。。
OctopusThu 2008-12-18
  • 打赏
  • 举报
回复
回复2楼:是笔误,呵呵。

回复1楼:没太明白你的意思。LinkedHashMap应该是保持元素顺序的啊。
  • 打赏
  • 举报
回复
你是不是写错了啊?

c:out 里应该写 map.key,而不是 kvMap.key 吧?
bruni 2008-12-18
  • 打赏
  • 举报
回复
因为它是map, 使用iterate来循环的.
你用List就不会有顺序问题了.

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧