Nesting JSF components inside RichFaces
rvaneperen Jul 16, 2007 6:48 PMI am new to RichFaces and JSF. I am programmatically creating a RichFaces PanelBar with several PanelBarItems. The PanelBarItems have nested PanelBar and PanelBarItems. Up to here it works fine. Inside the inner PanelBarItems I need to nest some JSF Components - an HTMLPanelGrid with some outputText and CommandLinks etc. These seem to compile and run, but nothing is displayed - only the RichFaces components display. The code is below. Any ideas?
Ray
From xhtml page:
<rich:panelBar binding="#{datasetManagementMainWebBean.scheduleBar}"/>
From backing bean:
/**
* Programmatically builds the RichFaces PanelBar component. One panel item is built for each schedule in scheduleList
* and each of those has a panel bar created with one panel item for each dataset that has been received against that schedule.
* Each dataset panel item is them populated with various components based on their state.
*
* @return the RichFaces HtmlPanelBar object
*/
public HtmlPanelBar getScheduleBar()
{
this.checkCurrentState();
if (this.isValidConfig())
{
this.createScheduleList();
DatasetScheduleDO schedule;
HtmlPanelBar datasetBar;
HtmlPanelBarItem scheduleItem;
HtmlDataGrid datasetGrid;
HtmlOutputText receiveText;
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
// build the panel bar for the schedules
Application app = FacesContext.getCurrentInstance().getApplication();
this.scheduleBar = (HtmlPanelBar) app.createComponent(HtmlPanelBar.COMPONENT_TYPE);
this.scheduleBar.setId("scheduleBar");
for (int x = 0; x < this.scheduleList.size(); x++)
{
// build a panel bar item for each schedule
schedule = this.scheduleList.get(x);
scheduleItem = new HtmlPanelBarItem();
scheduleItem.setId("schedule" + schedule.getId());
scheduleItem.setLabel(df.format(schedule.getScheduleDate()));
if (!schedule.getDatasets().isEmpty())
{
// build a panel bar for the datasets
datasetBar = new HtmlPanelBar();
datasetBar.setId("scheduleDatasets" + schedule.getId());
scheduleItem.getChildren().add(datasetBar);
HtmlPanelBarItem datasetItem;
DatasetDO dataset;
for (int y = 0; y < schedule.getDatasets().size(); y++)
{
// build the panel bar item for each dataset
dataset = schedule.getDatasets().get(y);
datasetItem = new HtmlPanelBarItem();
datasetItem.setId("dataset" + dataset.getId());
datasetItem.setLabel("Datagate Id: " + dataset.getDatagateId() + " - " + dataset.getDatasetName());
// build the data grid to contain the dataset details
datasetGrid = new HtmlDataGrid();
datasetGrid.setCellpadding("0");
datasetGrid.setCellspacing("0");
datasetGrid.setId("datasetGrid" + dataset.getId());
datasetGrid.setWidth("100%");
datasetGrid.setColumns(1);
// put the receive data into the grid
receiveText = new HtmlOutputText();
receiveText.setId("receiveText" + dataset.getId());
receiveText.setTitle("The title");
receiveText.setValue("Received: " + df.format(dataset.getReceiveDate()) + " by "
+ dataset.getReceiveUser());
datasetGrid.getChildren().add(receiveText);
datasetItem.getChildren().add(datasetGrid);
datasetBar.getChildren().add(datasetItem);
}
}
this.scheduleBar.getChildren().add(scheduleItem);
}
}
return this.scheduleBar;
}