java - 如何将HashMap显示为DataTable

标签 java primefaces

我在 mybean 中有一个 HashMap:

private ArrayList<HashMap<String,Object>> searchResult;

我可以成功地将其中的数据显示为表格:

<p:dataTable id="resultTable" var="result" value="#{myBean.searchResult}">
    <p:column headerText="Name">
        <h:outputText value="#{result.NAME}" />
    </p:column>
    <p:column headerText="Amount">
        <h:outputText value="#{result.AMOUNT}" />
    </p:column>
    <p:column headerText="Date1">
        <h:outputText value="#{result.DATE1}" />
    </p:column>
    <p:column headerText="Date2">
        <h:outputText value="#{result.DATE2}" />
    </p:column>
</p:dataTable>

问题是我不知道 HashMap 将有多少个键(DATE1、DATE2、... DATEN)。 如何创建这样一个包含所有值及其键作为标题的数据表?

UPD。 与下面的答案中有关汽车的展示相比,不同之处在于,该类汽车具有品牌、年份、颜色等属性,但在我的情况下,您在执行之前不知道所有列。所以我稍微修改了一个例子。也许有人会发现我的解决方案很有用。

myForm.xhtml(与示例相同):

<p:dataTable id="searchResults" var="result" value="#{myBean.searchResult}">                    
    <p:columns value="#{myBean.columns}" var="column" columnIndexVar="colIndex">
        <f:facet name="header">
            <h:outputText value="#{column.header}" />
        </f:facet>
        <h:outputText value="#{result[column.property]}" />
    </p:columns>
</p:dataTable>

myBean.java(ColumnModel 与示例展示中的相同):

private ArrayList<HashMap<String,Object>> searchResult;
private List<ColumnModel> columns;

private void createColumns(ArrayList<String> selectedDates){
    columns = new ArrayList<ColumnModel>();   
    columns.add(new ColumnModel("Name", "NAME"));
    columns.add(new ColumnModel("Amount", "AMOUNT"));
    for (int i = 0; i < selectedDates.size(); i++) {
        columns.add(new ColumnModel(selectedDates.get(i), "DATE" + i));
    }
    setColumns(columns);
}

最佳答案

您可以使用 PrimeFaces ShowCase 中描述的 p:columns 组件:

<p:dataTable id="cars" var="car" value="#{dtColumnsView.cars}" widgetVar="carsTable" filteredValue="#{dtColumnsView.filteredCars}">                    
    <p:columns value="#{dtColumnsView.columns}" var="column" columnIndexVar="colIndex" sortBy="#{car[column.property]}" filterBy="#{car[column.property]}">
        <f:facet name="header">
            <h:outputText value="#{column.header}" />
        </f:facet>
        <h:outputText value="#{car[column.property]}" />
    </p:columns>
</p:dataTable>

关于java - 如何将HashMap显示为DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31341906/

相关文章:

javascript - 通过 Javascript 单击时 PrimeFaces 单选按钮样式不更新

java - 从 Redis 中提取 key

java - Gson 安全异常 : Can not make Class Constructor accessible

java - 对于原子类,Java 如何按值管理调用?

java - 忽略子线程生成的日志

sorting - Primefaces 数据表排序和过滤在 rowSelect 之前不起作用

java - 如何读取pdf文件的书签链接?

java - 为什么在我引入 Apache SHIRO 时 .XHTML 文件试图调用 .JSP 文件?

jsf-2 - omn​​ifaces UnmappedResourceHandler 防止 primefaces 动态图像加载

ajax - 在自定义 selectOneRadio 上使用 ajax 事件时出现异常