2011-09-21 65 views
3

我有一個jsp頁面,它接收這種類型的HashMap對象: Map<Long, Map<String, Object>>使用鍵值在jsp中訪問Map <Long,Map <String,Object >>的內容

這個地圖的一個例子是:
foo = {1 = {id=1, response="someText"}, 2={id=99, response="random"}};

我試圖遍歷兩個地圖的內容FOO這樣的:

<c:forEach items="${fooMap.content}" var="outerMap"> 
    <c:forEach items="${outerMap.value}" var = "innerMap"> 
     <p>${innerMap.response}</p> 
    </c:foreach> 
</c:forEach> 

但是,這將引發「屬性‘響應’不找到類型java.util.HashMap ..... 有人會告訴我我做錯了什麼嗎?

我知道我可以使用Map.EntrySet訪問innerMap的內容但我想訪問該值使用特定的鍵。

回答

2

${outerMap.value}返回Map<String, Object>,其中一個條目具有「響應」作爲關鍵字。所以你需要從這裏直接得到它,而不是迭代它在${innerMap}中的入口集。

<c:forEach items="${fooMap.content}" var="outerMap"> 
    <p>${outerMap.value.response}</p> 
</c:forEach> 

的(更笨拙)替代正在檢查${innerMap}輸入鍵:

<c:forEach items="${fooMap.content}" var="outerMap"> 
    <c:forEach items="${outerMap.value}" var="innerMap"> 
     <c:if test="${innerMap.key == 'response'}"> 
      <p>${innerMap.value}</p> 
     </c:if> 
    </c:foreach> 
</c:forEach> 

現在你能依然包裝你的頭周圍? :)

+0

非常感謝。那只是釘了它。你介意告訴我爲什麼我的方法錯了嗎?我認爲foo是地圖的地圖。我會迭代兩次並訪問鍵和值。 – Stealth

+0

'$ {outerMap}'是一個'Map.Entry',其值是內部映射。要通過鍵獲取值,您需要處理內部地圖。但是你試圖通過內部映射的'Map.Entry'鍵來獲得一個值,它實際上沒有'getResponse()'方法。它只有'getKey()'和'getValue()'方法。 – BalusC

+0

感謝您的解釋和答案。只要SO允許我這樣做,我會盡快接受你的回答。 – Stealth

相關問題