<h:form>
<p:dataTable var="team" value="#{dtSubTableView.teams}">
<f:facet name="header">
NBA Teams
</f:facet>
<p:columnGroup type="header">
<p:row>
<p:column rowspan="2" headerText="Team" />
<p:column colspan="2" headerText="Stats" />
</p:row>
<p:row>
<p:column headerText="Wins" />
<p:column headerText="Losses" />
</p:row>
</p:columnGroup>
<p:subTable var="stats" value="#{team.stats}">
<f:facet name="header">
<h:outputText value="#{team.name}" />
</f:facet>
<p:column>
<h:outputText value="#{stats.season}" />
</p:column>
<p:column>
<h:outputText value="#{stats.win}" />
</p:column>
<p:column>
<h:outputText value="#{stats.loss}" />
</p:column>
<p:columnGroup type="footer">
<p:row>
<p:column footerText="Totals: " style="text-align:right"/>
<p:column footerText="#{team.allWins}" />
<p:column footerText="#{team.allLosses}" />
</p:row>
</p:columnGroup>
</p:subTable>
</p:dataTable>
</h:form>
@Named("dtSubTableView")
@RequestScoped
public class SubTableView {
private List<Team> teams;
@PostConstruct
public void init() {
teams = new ArrayList<Team>();
Team lakers = new Team("Los Angeles Lakers");
lakers.getStats().add(new Stats("2005-2006", 50, 32));
lakers.getStats().add(new Stats("2006-2007", 44, 38));
lakers.getStats().add(new Stats("2007-2008", 40, 42));
lakers.getStats().add(new Stats("2008-2009", 45, 37));
lakers.getStats().add(new Stats("2009-2010", 48, 34));
lakers.getStats().add(new Stats("2010-2011", 42, 42));
teams.add(lakers);
Team celtics = new Team("Boston Celtics");
celtics.getStats().add(new Stats("2005-2006", 46, 36));
celtics.getStats().add(new Stats("2006-2007", 50, 32));
celtics.getStats().add(new Stats("2007-2008", 41, 41));
celtics.getStats().add(new Stats("2008-2009", 45, 37));
celtics.getStats().add(new Stats("2009-2010", 38, 44));
celtics.getStats().add(new Stats("2010-2011", 35, 47));
teams.add(celtics);
}
public List<Team> getTeams() {
return teams;
}
}
public class Stats implements Serializable {
private String season;
private int win;
private int loss;
public Stats() {}
public Stats(String season, int win, int loss) {
this.season = season;
this.win = win;
this.loss = loss;
}
public int getWin() {
return win;
}
public void setWin(int win) {
this.win = win;
}
public int getLoss() {
return loss;
}
public void setLoss(int loss) {
this.loss = loss;
}
public String getSeason() {
return season;
}
public void setSeason(String season) {
this.season = season;
}
}