在JSF页面中显示HashMap条目的键和值

时间:2011-06-03 10:06:47

标签: jsf hashmap

我想在JSF UI中显示HashMap个键及其相关值。

我怎样才能做到这一点?如何使用像HashMap这样的迭代器组件在JSF页面中迭代<h:datatable>

2 个答案:

答案 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>

来源:https://gist.github.com/zhangsida/9206849