I have a complete example program that I can post if need be, but here's the relevant code:
Facelets View: fruitSales.xhtml
Code: Select all
<h:form>
<p:dataTable value="${salesTotalBean.quarterTotals}" var="quarterTotal"
selection="#{salesTotalBean.selectedQuarterTotal}" selectionMode="single"
onRowSelectUpdate="salesInfoPanel"
onRowUnselectUpdate="salesInfoPanel">
<p:column>
<f:facet name="header">Year</f:facet>
<h:outputText value="${quarterTotal.year}"/>
</p:column>
<p:column>
<f:facet name="header">Quarter</f:facet>
<h:outputText value="${quarterTotal.quarter}"/>
</p:column>
<p:column>
<f:facet name="header">Unit Sales</f:facet>
<h:outputText value="${quarterTotal.total}"/>
</p:column>
</p:dataTable>
<p:outputPanel id="salesInfoPanel">
<p:panel id="salesQuarterTotalPanel">
<h:panelGroup rendered="${!(empty salesInfoBean.selectedQuarterTotal)}">
${salesInfoBean.selectedQuarterTotal.year} Q${salesInfoBean.selectedQuarterTotal.quarter}
</h:panelGroup>
<h:panelGroup rendered="${(empty salesInfoBean.selectedQuarterTotal)}">
No quarter selected
</h:panelGroup>
</p:panel>
</p:outputPanel>
</h:form>
Code: Select all
@ManagedBean
@ViewScoped
public class SalesTotalBean implements Serializable {
private static final long serialVersionUID = 1L;
@ManagedProperty(value="#{salesService}")
private SalesService salesService;
private ArrayList<SalesQuarterTotal> quarterTotals;
private SalesQuarterTotal selectedQuarterTotal;
@PostConstruct
public void postConstruct() {
quarterTotals = salesService.listQuarterlySalesTotals();
}
// Getters and setters
}
Code: Select all
@ManagedBean
@RequestScoped
public class SalesInfoBean {
@ManagedProperty(value="#{salesProductBean}")
private SalesProductBean salesProductBean;
@ManagedProperty(value="#{salesTotalBean}")
private SalesTotalBean salesTotalBean;
@PostConstruct
public void postConstruct() {
SalesQuarterTotal selectedQuarter = salesTotalBean.getSelectedQuarterTotal();
SalesQuarterTotal productQuarter = salesProductBean.getSelectedQuarterTotal();
if (selectedQuarter != null && (productQuarter == null || !selectedQuarter.equals(productQuarter))) {
salesProductBean.setSelectedQuarterTotal(selectedQuarter);
salesProductBean.doUpdate();
}
}
// Getters and setters
}
Code: Select all
<f:view content-type="text/html">
Code: Select all
<p:dataTable value="${salesTotalBean.quarterTotals}" var="quarterTotal"
selection="#{salesTotalBean.selectedQuarterTotal}" selectionMode="single"
rowSelectListener="#{salesTotalBean.onRowSelect}"
onRowSelectUpdate="salesInfoPanel"
rowUnselectListener="#{salesTotalBean.onRowUnselect}"
onRowUnselectUpdate="salesInfoPanel">