2016-02-12 109 views
0

假設我有一個下面的地圖,我想通過鍵打印在嵌套映射值:JSP:如何通過嵌套Map中的鍵獲取值?

Map<Integer, Map<String, someObject>> map = new HashMap<Integer, Map<String, someObject>>(); 

所以,我的方法是像如下:

<c:forEach var="item1" items="${map}" varStatus="idx1"> 
    <c:forEach var="item2" items="${item1.value}" varStatus="idx2"> 
     <td>${item2['A'].variableInSomeObject}</td> 
     <td>${item2['B'].variableInSomeObject}</td> 
    </c:forEach> 
</c:forEach> 

也試過

<c:out value = "${item2['A'].variableInSomeObject}"/> 

但它會導致錯誤。 請指導我缺少的東西。

+0

你是什麼ITEM2 [ 'A']的意思。你想在內部地圖中的特定關鍵字'A'獲得對象。 –

+0

是的,在遍歷嵌套地圖時,我想按特定鍵打印值。 – Brooke

+0

您確定該特定對象的'variableInSomeObject'中有值嗎? –

回答

0

當您使用<c:forEach>遍歷映射時,迭代中的每個項目都是Map.Entry的實例。每個項目有keyvalue。對於項目Map<Integer, Map<String, SomeObject>>keyInteger的實例,並且valueMap<String, SomeObject>的實例。

假設您有以下地圖和嵌套地圖:

Map<Integer, Map<String, SomeObject>> outerMap = 
     new HashMap<Integer, Map<String, SomeObject>>(); 
Map<String, SomeObject> firstNestedMap = new HashMap<String, SomeObject>(); 
Map<String, SomeObject> secondNestedMap = new HashMap<String, SomeObject>(); 

和一些對象:

public class SomeObject { 

    public Integer getVariableInSomeObject() { 
     return variableInSomeObject; 
    } 

    public void setVariableInSomeObject(Integer variableInSomeObject) { 
     this.variableInSomeObject = variableInSomeObject; 
    } 

    private Integer variableInSomeObject; 
} 

您可以填寫地圖的,例如,如下圖所示:

SomeObject firstSomeObject = new SomeObject(); 
firstSomeObject.setVariableInSomeObject(1); 

SomeObject secondSomeObject = new SomeObject(); 
secondSomeObject.setVariableInSomeObject(2); 

SomeObject thirdSomeObject = new SomeObject(); 
thirdSomeObject.setVariableInSomeObject(3); 

SomeObject fourthSomeObject = new SomeObject(); 
fourthSomeObject.setVariableInSomeObject(4); 

firstNestedMap.put("A", firstSomeObject); 
firstNestedMap.put("B", secondSomeObject); 

secondNestedMap.put("A", thirdSomeObject); 
secondNestedMap.put("B", fourthSomeObject); 

outerMap.put(1, firstNestedMap); 
outerMap.put(2, secondNestedMap); 

要迭代嵌套地圖並獲取值,請使用以下JSTL代碼:

<table> 
<c:forEach var="item1" items="${map}"> 
    <c:forEach var="item2" items="${item1.value}"> 
    <tr> 
     <td><c:out value="${item2.value.variableInSomeObject}" /></td> 
    </tr> 
    </c:forEach> 
</c:forEach> 
</table> 

因此,每次迭代時item1.value將返回嵌套地圖的實例,即Map<String, SomeObject>item2將返回SomeObject的實例。表達式${item2.value.variableInSomeObject}將返回Integer字段的實例。

其結果是,您將獲得:

enter image description here