从基于JSTL的键的hashmap获取值

时间:2013-09-12 06:01:45

标签: java jsp hashmap jstl

我希望根据密钥获得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:Property 'External' not found on type java.util.HashMap$Entry
我很确定那里有钥匙。

3 个答案:

答案 0 :(得分:85)

如果您要做的就是获取地图中单个条目的值,则根本不需要遍历任何集合。稍微简化gautum的响应,您可以按如下方式获取命名映射条目的值:

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

其中'map'是集合,'key'是您尝试提取值的字符串键。

答案 1 :(得分:5)

请你试试下面的代码

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

答案 2 :(得分:0)

我遇到了上面提到的解决方案的问题,因为指定字符串键会给我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>