DataTable - Grouping
DataTable column headers and footers can be grouped for complex display.
Source
<h:form id="form">
<p:dataTable id="salesTable" var="sale" value="#{tableBean.sales}">
<f:facet name="header">
Sales/Profits of Manufacturers
</f:facet>
<p:columnGroup type="header">
<p:row>
<p:column rowspan="3" headerText="Manufacturer" />
<p:column colspan="4" headerText="Sales" />
</p:row>
<p:row>
<p:column colspan="2" headerText="Sales Count" />
<p:column colspan="2" headerText="Profit" />
</p:row>
<p:row>
<p:column headerText="Last Year" />
<p:column headerText="This Year" />
<p:column headerText="Last Year" />
<p:column headerText="This Year" />
</p:row>
</p:columnGroup>
<p:column>
#{sale.manufacturer}
</p:column>
<p:column>
#{sale.lastYearProfit}%
</p:column>
<p:column>
#{sale.thisYearProfit}%
</p:column>
<p:column>
#{sale.lastYearSale}$
</p:column>
<p:column>
#{sale.thisYearSale}$
</p:column>
<p:columnGroup type="footer">
<p:row>
<p:column colspan="3" footerText="Totals:"
style="text-align:right" />
<p:column footerText="#{tableBean.lastYearTotal}$" />
<p:column footerText="#{tableBean.thisYearTotal}$" />
</p:row>
</p:columnGroup>
<f:facet name="footer">
Use a bicycle instead of a car
</f:facet>
</p:dataTable>
</h:form>
package org.primefaces.examples.view;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.primefaces.examples.domain.ManufacturerSale
public class TableBean implements Serializable {
static {
manufacturers = new String[10];
manufacturers[0] = "Mercedes";
manufacturers[1] = "BMW";
manufacturers[2] = "Volvo";
manufacturers[3] = "Audi";
manufacturers[4] = "Renault";
manufacturers[5] = "Opel";
manufacturers[6] = "Volkswagen";
manufacturers[7] = "Chrysler";
manufacturers[8] = "Ferrari";
manufacturers[9] = "Ford";
}
private final static String[] manufacturers;
private List<ManufacturerSale> sales;
public TableBean() {
populateRandomSales();
}
private int getRandomSale() {
return (int) (Math.random() * 100000);
}
private int getRandomProfit() {
return (int) (Math.random() * 100);
}
public List<ManufacturerSale> getSales() {
return sales;
}
private void populateRandomSales() {
sales = new ArrayList<ManufacturerSale>();
for(int i = 0; i < 10; i++) {
sales.add(new ManufacturerSale(manufacturers[i], getRandomSale(), getRandomSale(), getRandomProfit(), getRandomProfit()));
}
}
public int getLastYearTotal() {
int total = 0;
for(ManufacturerSale sale : getSales()) {
total += sale.getLastYearSale();
}
return total;
}
public int getThisYearTotal() {
int total = 0;
for(ManufacturerSale sale : getSales()) {
total += sale.getThisYearSale();
}
return total;
}
}
