2015-07-10 57 views
1

我在为myBean一个HashMap:如何显示的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,... DATE N)。 如何使用所有值和它们的键作为标题创建这样一个dataTable?

UPD。 比较从下面的答案中展示Cars,不同之处在于,Class Car具有品牌,年份,颜色等属性,但就我而言,在执行之前您并不知道所有列。所以我稍微修改了一个例子。也许有人会发现我的解决方案有用。

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); 
} 
+2

可能的重复[显示哈希图键和值在primefaces数据塔ble](http://stackoverflow.com/questions/9074177/displaying-hashmap-keys-and-values-in-a-primefaces-datatable) –

回答

1

可以使用所描述的p:columns部件在PrimeFaces ShowCase

<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> 
+0

谢谢!所以在JSF端循环HashMap是不可能的,因为你的解决方案需要在bean和新类上进行更改 – Darkwing