我已經看到了很多像這樣的問題,但並不完全一樣。不同之處在於這是一個外鍵問題。有一個小部件集合foo,它有一個typeId。然後是包含typeId和typeName的類型的散列表。當過小部件的集合迭代,我們希望基於widget的TYPEID到顯示的typeName:如何從JSTL中的hashmap得到一個值
的Java
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有一個方法字符串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>
使用類型表總是空的,最後一個不顯示「一」前4列。我甚至跑那麼遠,到TYPEID設置成這樣:
<c:set var="typeId" value="${foo.typeId}"/>
並取代所有foo.typeId用簡單TYPEID,我也得到同樣的效果。在這種情況下,我可以更改地圖,我不能更改foo。 foo的ID是一個字符串,不能更改爲Long。我已經嘗試將hashmap的密鑰設置爲Long,並且沒有任何效果。有什麼想法嗎?
我很欣賞這個回覆,但我認爲通訊可能會出現故障。目標不是遍歷HashMap(typeMap),而是遍歷單獨的列表(fooList)。在迭代列表的一行時,使用typeId(整個外鍵概念)在typeMap中查找字符串值。在我提供的示例中,第5個和第6個正在使用值屬性:typeMap [foo.typeId] .value和typeMap ['foo.typeId']。值 –
明白了...我會盡力找到一些東西。但我認爲$ {typeMap [foo.typeId] .value}應該已經工作了! – edubriguenti