如何从JSTL中的hashmap获取值

时间:2014-01-22 18:47:30

标签: java hashmap jstl lookup

我见过很多像这样的问题,但并不完全正确。区别在于这是一个外键问题。有一个小部件的集合,foo,有一个typeId。然后是一个包含typeId和typeName的类型的hashmap。迭代小部件集合时,我们希望根据小部件的typeId显示typeName:

爪哇

Map<String, String> typeMap = new HashMap<Integer, String>();
typeMap.put("1", "One");
typeMap.put("2", "Two");
typeMap.put("3", "Three");

List<Foo> fooList = generateFooList();

其中Foo有一个方法String getTypeId(),它返回值“1”,“2”或“3”以及String getName()。

JSTL

<table border="1">
    <tr><th>Key</th><th>value</th><th>Key Class</th></tr>
    <c:forEach var="foo" items="${fooList}" varStatus="status">
        <tr>      
          <td>${foo.name}</td>
          <td>${foo.typeId}</td>
<!-- In the following four lines of code, the idea is to use the typeId 
     from the current foo to 'get' the name of the type from the typeMap.
     All the example I have seen are always iterating over the map itself, 
     which is NOT the case here. -->
          <td>${typeMap['foo.typeId']}</td>
          <td>${typeMap[foo.typeId]}</td>
          <td>${typeMap['foo.typeId'].value}</td>
          <td>${typeMap[foo.typeId].value}</td>
          <td>${typeMap['1']}}</td>
        </tr>
    </c:forEach>
</table>

使用typeMap的前4列始终为空,最后一列显示“One”。我甚至将typeId设置为:

<c:set var="typeId" value="${foo.typeId}"/>

用简单的typeId替换了所有的foo.typeId,我得到了同样的效果。在这种情况下我可以改变地图,我无法改变foo。 foo的ID是一个String,不能更改为Long。我已经尝试将hashmap的密钥设为Long并且也没有任何影响。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我真的认为片段

<td>${typeMap['foo.typeId'].value}</td>

应该工作。

既然没有。试试这个:

<td>${typeMap[\'foo.typeId\'].value}</td>

作为最后一个资源,您可以迭代列表和hashmap。 并将hashmap的“键”与列表位置进行比较。 然后你只在它们相等的时候打印它。

我知道这不是最好的,只是一种解决方法。