2011-06-03 71 views

回答

26

只有<c:forEach>支持Map。每次迭代都會返回一個Map.Entry實例(就像在普通的Java for循環中一樣)。

<c:forEach items="#{yourBean.map}" var="entry"> 
    <li>Key: #{entry.key}, value: #{entry.value}</li> 
</c:forEach> 

<h:dataTable>(和<ui:repeat>)只支持List(JSF 2.2將帶着Collection支持)。您可以將所有密鑰複製到單獨的List中,然後對其進行迭代,然後使用迭代鍵在EL中使用[]獲取關聯值。

private Map<String, String> map; 
private List<String> keyList; 

public void someMethodWhereMapIsCreated() { 
    map = createItSomeHow(); 
    keyList = new ArrayList<String>(map.keySet()); 
} 

public Map<String, String> getMap(){ 
    return map; 
} 

public List<String> getKeyList(){ 
    return keyList; 
} 
<h:dataTable value="#{yourBean.keyList}" var="key"> 
    <h:column> 
     Key: #{key} 
    </h:column> 
    <h:column> 
     Value: #{yourBean.map[key]} 
    </h:column> 
</h:dataTable> 

注意到應該是一個HashMap本質上是無序的。如果您想維護廣告訂單,例如使用List,請改爲使用LinkedHashMap

+0

感謝它工作正常... – Sweety 2011-06-03 11:20:01

+0

歡迎:) – 2011-06-03 11:33:36

+2

由BalusC的修正是我的關鍵+1 BalusC – user1156544 2016-04-19 09:59:42