基于键从哈希映射中获取值到JSTL

52

我想根据键获取HashMap的值。

HashMap<String, ArrayList<String>> map 
    = new HashMap<String, ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();

map.put("key", arrayList);
request.setAttribute("key", map);

我所做的是

<c:forEach var="map" items="${requestScope.key}">
    <c:forEach var="hash" items="${map.value}">
        <option><c:out value="${hash}"/></option>
    </c:forEach>
</c:forEach>

但看起来它正在打印所有的内容,我想做的是根据键获取值,例如:hash.key或其他什么东西。

更新:
我做了类似于这样的事情,但它仍然不起作用。

<c:forEach var="map" items="${requestScope.key}">
    <c:forEach var="hash" items="${map['key']}">
        <option><c:out value="${hash}"/></option>
    </c:forEach>
</c:forEach>

并且 StackTrace 显示:在类型 java.util.HashMap$Entry 上找不到属性 'External'
我相信那种键确实存在。


1
你可以使用 ${map["key_name"]},其中 key_name 是字符串键,例如 map.put("key_name", value),然后你可以通过 ${map.key} 简单地访问该键。 - Prakash K
我尝试着做这个,但是它抛出了一个错误,以下是堆栈跟踪信息:在类型java.util.HashMap$Entry上未找到属性'bool' - newbie
你能把你所做的代码贴上来吗? - Prakash K
那么你只是想打印出映射中键为 “key” 的值? - Rohit Jain
仅使用内部的 foreach 循环,移除外层的 foreach 循环。在 items 中使用 items="${key['key']}",其中 ${key} 是在请求属性中设置的映射集。 - Prakash K
3个回答

97

如果你只是想获取一个映射中的单个条目值,那么根本不需要循环遍历任何集合。稍微简化Gautum的回答,你可以按如下方式获取命名映射条目的值:

<c:out value="${map['key']}"/>

其中,'map'是集合,而'key'是你要提取值的字符串键。


4
这应该是被接受的答案,但请注意缺少对值加引号的处理: <c:out value="${map['key']}"/> - Gonzalo
这是我的地图长这样 {key1=23, key2=1, key3=0}。我在使用上面的代码时遇到了这个错误:javax.el.PropertyNotFoundException: Property 'key1' not found on type java.util.HashMap$Node。 - MR AND
1
如果key的类型是Integer,那么您应该使用<c:out value="${map[(1).intValue()]}"/>来获取值。 - yaylitzis

4

请尝试以下代码:

<c:forEach var="hash" items="${map['key']}">
        <option><c:out value="${hash}"/></option>
  </c:forEach>

-1

我之前遇到了一些问题,因为上面提到的指定字符串键会导致javax.el.PropertyNotFoundException异常。下面展示的代码对我有用。在这里,我使用状态来计算每个循环的索引,并显示我感兴趣的索引值。

<c:forEach items="${requestScope.key}"  var="map" varStatus="status" >
    <c:if test="${status.index eq 1}">
        <option><c:out value=${map.value}/></option>
    </c:if>
</c:forEach>    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接