【问题标题】:Display key and value of HashMap entries in JSF page在 JSF 页面中显示 HashMap 条目的键和值
【发布时间】:2011-06-03 10:06:47
【问题描述】:

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

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

【问题讨论】:

    标签: jsf hashmap


    【解决方案1】:

    使用<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

    【讨论】:

    • 您可以将value="#{map.entrySet().toArray()} 替换为value="#{map} 以获得相同的结果。
    【解决方案2】:

    只有&lt;c:forEach&gt; 支持Map。每次迭代都会返回一个 Map.Entry 实例(就像在普通 Java 中的 for 循环中一样)。

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

    &lt;h:dataTable&gt;(和&lt;ui:repeat&gt;)仅支持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

    【讨论】:

    • BalusC 的修改对我来说很关键 +1 BalusC
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 1970-01-01
    相关资源
    最近更新 更多