<a:form> <a:dataTable var="sale" value="#{dtGroupView.sales}"> <f:facet name="header"> Sales/Profits of Manufacturers </f:facet> <a:columnGroup type="header"> <a:row> <a:column rowspan="3" headerText="Manufacturer" /> <a:column colspan="4" headerText="Sale Rate" /> </a:row> <a:row> <a:column colspan="2" headerText="Sales" /> <a:column colspan="2" headerText="Profit" /> </a:row> <a:row> <a:column headerText="Last Year" /> <a:column headerText="This Year" /> <a:column headerText="Last Year" /> <a:column headerText="This Year" /> </a:row> </a:columnGroup> <a:column> <h:outputText value="#{sale.manufacturer}" /> </a:column> <a:column> <h:outputText value="#{sale.lastYearProfit}%" /> </a:column> <a:column> <h:outputText value="#{sale.thisYearProfit}%" /> </a:column> <a:column> <h:outputText value="#{sale.lastYearSale}"> <f:convertNumber type="currency" currencySymbol="$" /> </h:outputText> </a:column> <a:column> <h:outputText value="#{sale.thisYearSale}"> <f:convertNumber type="currency" currencySymbol="$" /> </h:outputText> </a:column> <a:columnGroup type="footer"> <a:row> <a:column colspan="3" style="text-align:right" footerText="Totals:" /> <a:column footerText="$#{dtGroupView.lastYearTotal}" /> <a:column footerText="$#{dtGroupView.thisYearTotal}" /> </a:row> </a:columnGroup> <f:facet name="footer"> Data between 2013-2014 </f:facet> </a:dataTable> <a:dataTable var="player" value="#{dtGroupView.players}" style="margin-top:40px"> <f:facet name="header"> Dynamic Columns </f:facet> <a:columnGroup type="header"> <a:row> <a:column rowspan="2" headerText="Player" /> <a:column colspan="#{dtGroupView.yearCount}" headerText="Goals" /> </a:row> <a:row> <ui:repeat value="#{dtGroupView.years}" var="year"> <a:column headerText="#{year}" /> </ui:repeat> </a:row> </a:columnGroup> <a:column> <h:outputText value="#{player.name}" /> </a:column> <a:columns value="#{dtGroupView.years}" var="year"> <h:outputText value="#{player.getGoals(year)}" /> </a:columns> <f:facet name="footer"> Data between 2010-2014 </f:facet> </a:dataTable> </a:form>
package com.jarch.showcase.view.data.datatable; import java.io.Serializable; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import org.primefaces.showcase.domain.Player; import org.primefaces.showcase.domain.Sale; @ManagedBean(name="dtGroupView") @ViewScoped public class GroupView implements Serializable { private final static String[] manufacturers; private List<Sale> sales; private final static String[] playerNames; private List<Integer> years; private List<Player> players; static { manufacturers = new String[10]; manufacturers[0] = "Apple"; manufacturers[1] = "Samsung"; manufacturers[2] = "Microsoft"; manufacturers[3] = "Philips"; manufacturers[4] = "Sony"; manufacturers[5] = "LG"; manufacturers[6] = "Sharp"; manufacturers[7] = "Panasonic"; manufacturers[8] = "HTC"; manufacturers[9] = "Nokia"; } static { playerNames = new String[10]; playerNames[0] = "Lionel Messi"; playerNames[1] = "Cristiano Ronaldo"; playerNames[2] = "Arjen Robben"; playerNames[3] = "Franck Ribery"; playerNames[4] = "Ronaldinho"; playerNames[5] = "Luis Suarez"; playerNames[6] = "Sergio Aguero"; playerNames[7] = "Zlatan Ibrahimovic"; playerNames[8] = "Neymar Jr"; playerNames[9] = "Andres Iniesta"; } @PostConstruct public void init() { sales = new ArrayList<Sale>(); for(int i = 0; i < 10; i++) { sales.add(new Sale(manufacturers[i], getRandomAmount(), getRandomAmount(), getRandomPercentage(), getRandomPercentage())); } years = new ArrayList<Integer>(); years.add(2010); years.add(2011); years.add(2012); years.add(2013); years.add(2014); players = new ArrayList<Player>(); for(int i = 0; i < 10; i++) { players.add(new Player(playerNames[i], generateRandomGoalStatsData())); } } public List<Sale> getSales() { return sales; } private int getRandomAmount() { return (int) (Math.random() * 100000); } private int getRandomPercentage() { return (int) (Math.random() * 100); } public String getLastYearTotal() { int total = 0; for(Sale sale : getSales()) { total += sale.getLastYearSale(); } return new DecimalFormat("###,###.###").format(total); } public String getThisYearTotal() { int total = 0; for(Sale sale : getSales()) { total += sale.getThisYearSale(); } return new DecimalFormat("###,###.###").format(total); } public List<Integer> getYears() { return years; } public int getYearCount() { return years.size(); } public List<Player> getPlayers() { return players; } private Map<Integer,Integer> generateRandomGoalStatsData() { Map<Integer,Integer> stats = new LinkedHashMap<Integer, Integer>(); for (int i = 0; i < 5; i++) { stats.put(years.get(i), getRandomGoals()); } return stats; } private int getRandomGoals() { return (int) (Math.random() * 50); } }
package com.jarch.showcase.domain; import java.io.Serializable; public class Sale implements Serializable { private String manufacturer; private int lastYearSale; private int thisYearSale; private int lastYearProfit; private int thisYearProfit; public Sale() {} public Sale(String manufacturer, int lastYearSale, int thisYearSale, int lastYearProfit, int thisYearProfit) { this.manufacturer = manufacturer; this.lastYearSale = lastYearSale; this.thisYearSale = thisYearSale; this.lastYearProfit = lastYearProfit; this.thisYearProfit = thisYearProfit; } public int getLastYearProfit() { return lastYearProfit; } public void setLastYearProfit(int lastYearProfit) { this.lastYearProfit = lastYearProfit; } public int getLastYearSale() { return lastYearSale; } public void setLastYearSale(int lastYearSale) { this.lastYearSale = lastYearSale; } public String getManufacturer() { return manufacturer; } public void setManufacturer(String manufacturer) { this.manufacturer = manufacturer; } public int getThisYearProfit() { return thisYearProfit; } public void setThisYearProfit(int thisYearProfit) { this.thisYearProfit = thisYearProfit; } public int getThisYearSale() { return thisYearSale; } public void setThisYearSale(int thisYearSale) { this.thisYearSale = thisYearSale; } }
package com.jarch.showcase.domain; import java.util.LinkedHashMap; import java.util.Map; public class Player { private String name; private Map<Integer,Integer> goals; public Player() { goals = new LinkedHashMap<Integer,Integer>(); } public Player(String name, Map<Integer,Integer> goals) { this.name = name; this.goals = goals; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getGoals(int year) { return goals.get(year); } }