我想在JSF UI中显示HashMap
个键及其相关值。
我怎样才能做到这一点?如何使用像HashMap
这样的迭代器组件在JSF页面中迭代<h:datatable>
?
答案 0 :(得分:34)
仅<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
。
答案 1 :(得分:0)
使用<ui:repeat>
( JSF 2.2及更高版本):
<ui:repeat var="entry" value="#{map.entrySet().toArray()}">
key:#{entry.key}, Id: #{entry.value.id}
</ui:repeat>