将 <c:forEach> 与 HashMap 一起使用 [重复]

Posted

技术标签:

【中文标题】将 <c:forEach> 与 HashMap 一起使用 [重复]【英文标题】:Use <c:forEach> with HashMap [duplicate] 【发布时间】:2011-01-13 17:33:54 【问题描述】:

我有一个将 servlet 属性设置为 HashMap 对象的 java 类:

request.setAttribute("types", da.getSecurityTypes());

其中request 是一个HttpServletRequest 对象,da.getSecurityTypes() 返回一个HashMap 对象。

有没有办法使用 c:foreach 或其他一些 JSTL 标记来遍历 HashMap 集合?

我在想:

 <c:forEach var="type" items="$types">
                 ...
     </c:forEach>

或者如果不能完成,如何制作自定义标签来处理这个?

在我的 JSP 页面中使用 Java 代码是我最后的手段,我想知道这是否可以通过 JSTL 实现。

谢谢, 乔纳斯。

【问题讨论】:

【参考方案1】:

是的,这是完全可以接受的。

当您使用&lt;c:forEach&gt; 迭代Map 时,迭代中的每个项目都是Map.Entry 的一个实例。所以给出你的例子:

<c:forEach var="type" items="$types">
   Key is $type.key
   Value is $type.value
</c:forEach>

【讨论】:

我发现很难的一件事是您不能在第二个&lt;c:foreach&gt; 循环中重用相同的变量。您需要提供一个不同的名称。【参考方案2】:

它有效,您将在循环中使用 type.keytype.value

【讨论】:

以上是关于将 <c:forEach> 与 HashMap 一起使用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

c中foreach的用法

JSTL 中c:forEach 嵌套c:if

Java servlet 将Map传到jsp中,通过<c:forEach >怎么将map中的值读取到?

在 JSP/JSTL 中使用 <c:forEach> 需要帮助

<c:foreach>怎么改变循环次数

JSP 中 JSTL<c:forEach 标签的用法