I trying to create custom dataTable. My dataTable will display p:rowExpansion, I want to add p:rowExpansion programatically.
I created the renderer, here. DefactColunmDataTable is the datatable extended primefaces p:dataTable.
I successfully display p:rowExpansion, but I don't know how to conditionally add rowExpansion.
Code: Select all
@SuppressWarnings("unchecked")
@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException
{
DefactColunmDataTable dcDataTable = (DefactColunmDataTable)component;
// get value
List<DefectRecordContainer> containers = (List<DefectRecordContainer>)dcDataTable.getValue();
for (int i=0; i< containers.size(); i++)
{
DefectRecordContainer container = containers.get(i);
List<DefectRecord> drList = container.getDefectList();
// set p:rowExpansion to dataTable.
setRowExpansions(context, dcDataTable, drList);
}
// render dataTable contents.
super.encodeEnd(context, dcDataTable);
}
private void setRowExpansions(FacesContext context, DefactColunmDataTable component, List<DefectRecord> defectList) throws IOException
{
// create rowExpansion.
RowExpansion rowEx = new RowExpansion();
HtmlPanelGroup outerDivPanelGroup = new HtmlPanelGroup();
outerDivPanelGroup.setLayout("block");
for (DefectRecord dr : defectList)
{
HtmlPanelGroup innerDivPanelGroup = new HtmlPanelGroup();
// div
innerDivPanelGroup.setLayout("block");
innerDivPanelGroup.setStyleClass("i-grid-row");
HtmlOutputText outputTxt = new HtmlOutputText();
outputTxt.setValue(dr.getDefectMessage());
innerDivPanelGroup.getChildren().add(outputTxt);
outerDivPanelGroup.getChildren().add(innerDivPanelGroup);
}
if (outerDivPanelGroup.getChildCount() > 0)
{
rowEx.getChildren().add(outerDivPanelGroup);
}
// add rowExpansion to DataTable.
component.getChildren().add(rowEx);
}