在JSF或Primefaces数据表中编辑hashmap

时间:2017-07-08 14:02:54

标签: jsf primefaces

我有一个代表服务提供者的对象。在那个对象中我有这个hashmap

private Map<MetaDataKeys, String> metaData;

&#34; MetaDatatKeys&#34;是一个看起来像这样的枚举,

public enum MetaDataKeys {
    PROVIDER_NAME, PROVIDER_CONTACT_NAME, PROVIDER_SERVICE_RADIUS;
}

我想在数据表或类似的数据库中显示hashmap键/值对进行编辑,其中包含一些内容,

            <p:dataTable id="providerDatatable" var="infoMap" value="#{editUserBean.editUser.metaData}">
                <p:column><h:outputText value="#{infoMap.key.metaData}"/></p:column>
                <p:column><h:inputText value="#{infoMap.key.value}"/></p:column>
            </p:dataTable>

在我的支持bean&#34; editUser&#34;是包含地图的对象。

最好的方法是什么?我甚至没有成功地让表格渲染和填充值。在搜索大多数示例时,请使用字符串或基元作为键。

1 个答案:

答案 0 :(得分:1)

你应该通过Map.entrySet()更好的方式在数据表中进行迭代。如果您尝试按Map.keySet()执行此操作并按键获取值,则可以采用O(n ^ 2)。

对于您的任务实现看起来像:

<p:dataTable id="providerDatatable" var="infoMap" value="#{editUserBean.editUser.metaData.entrySet()}">
    <p:column><h:outputText value="#{infoMap.key}"/></p:column>
    <p:column><h:inputText value="#{infoMap.value}"/></p:column>
</p:dataTable>

要编辑表格行,您可以使用p:cellEditor更多关于此组件的信息,您可以在Primefaces show case

找到