2015-07-10 44 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