【问题标题】:How to access a HashMap<Integer, ArrayList<Integer>> in JSTL using dynamic keys?如何使用动态键访问 JSTL 中的 HashMap<Integer, ArrayList<Integer>>?
【发布时间】:2019-11-01 17:23:56
【问题描述】:

我想在 JSTL 的循环中按键访问HashMap&lt;Integer, ArrayList&lt;Integer&gt;&gt;,但我尝试的方法不起作用。

我尝试了两种方法,虽然第一种有效,但它违背了使用 HashMap 的目的。我希望能够通过直接使用密钥来访问值。

<%
HashMap<Integer, ArrayList<Integer>> LocationLevels = 
levelManagementBean.getLocationLevels((Integer) 
session.getAttribute("NodeId"), (String) 
session.getAttribute("NodeName"));

pageContext.setAttribute("LocationLevels", LocationLevels);
%>

<c:forEach items="${LocationLevels}" var="elem">
    <c:if test="${elem.key == 9}">
        <c:forEach items="${elem.value}" var="levs">
            <c:out value="${levs}"/>
        </c:forEach>
    </c:if>
</c:forEach>

<br>

<c:set var="temp" value="9"/>
<c:forEach var="elem" items="${LocationLevels[temp]}">
    <c:out value="${elem}"/>
</c:forEach>

LocationLevels 是从 Bean 函数返回的 HashMap。代码的前两行在 scriptlet 标记中(我知道这不是最佳实践,但由于一些限制,我试图在将 JSP 页面的所有其他部分转换为 JSTL 时保持 HashMap 的部分相同)。函数 getLocationLevels 返回所需格式的 HashMap,这是有保证的(因为我之前在 scriptlet 中有一个 Java 代码,它可以工作)。

假设我想访问存储在 HashMap 中与键 9 相对应的 ArrayList。第一个 &lt;c:forEach&gt; 循环有效,但第二个无效,我不知道为什么。

感谢任何帮助。

【问题讨论】:

  • 你遇到了什么错误可以在这里提出
  • &lt;br&gt; 标签之前的循环可以正常工作。它显示与该键对应的数组列表的元素。但是&lt;br&gt;标签之后的循环不起作用,它什么都不显示。

标签: java jsp hashmap jstl


【解决方案1】:

在您的特定情况下, ${entry.value} 实际上是一个列表,因此您还需要对其进行迭代:

    <c:forEach var="entry" items="${LocationLevels}">
        <c:if test="${entry.key == '9'}">
            <c:out value="${entry.value}"/>
            <c:set var="tempList" value="${entry.value}"/>
        </c:if>                                      
    </c:forEach>
    <c:forEach var="elem" items='${tempList}'>
        <c:out value="${elem}"/>
    </c:forEach>

【讨论】:

  • 对不起,如果我在最初的问题中不清楚,但我问的是&lt;br&gt; 标记之后的&lt;c:forEach&gt; 循环。那个不工作。
  • 你可以试试${map['key']},单引号。像
  • 你能按照上面的方法试试吗,我最近更新了它,它对我有用
  • 它可能会起作用,但它首先破坏了使用 HashMap 的目的。遍历所有键以找到我要查找的键没有意义。
  • @Nikhil 当您调用 map.get(key) 时,map 在内部做了什么?并且使用 map 是您的要求,如果每个键都具有相同的列表,则它没有意义,但如果它不同,那么它当然有意义
猜你喜欢
  • 1970-01-01
  • 2015-02-19
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多