I am trying to use a <p:dataTable>
to display the contents of an object selected from a <p:selectOneMenu>
list.
The <p:selectOneMenu>
is correctly populated with options. However:
- The
<p:dataTable>
is not updated when I select an item from the<p:selectOneMenu>
- The server log indicates that the value of
#{MB.selectedDatabase}
isnull
. #{MB.setSelectedDatabase()}
is never invoked.
XHTML:
<h:form id="form">
<h:messages id="messages" />
<p:panelGrid columns="2">
<p:outputLabel value="Data:" />
<p:selectOneMenu immediate="true" id="customDatas" value="#{MB.selectedDatabase}" >
<p:ajax execute="customDatas" render="infos" listener="#{MB.whatIsSelected()}" />
<f:selectItem itemLabel="Select Data" itemValue="" />
<f:selectItems value="#{MB.datas}" var="data" itemLabel="#{data.name}" itemValue="#{data.id}"/>
</p:selectOneMenu>
</p:panelGrid>
<p:dataTable value="#{MB.selectedDatabase.infos}" var="item" id="infos" >
<p:column >
<f:facet name="header">
<h:outputText value="Info"/>
</f:facet>
<h:outputText value="#{item.info}"/>
</p:column>
</p:dataTable>
</h:form>
Partial code from my sessionScoped Bean:
public Data selectedDatabase;
public void whatIsSelected(){
logger.log(Level.SEVERE, "Selected data is : {0}", selectedDatabase.getName());
infoBusinessLocal.getinfosbydata(selectedDatabase);
}
public Data getSelectedDatabase() {
return selectedDatabase;
}
public void setSelectedDatabase(Data selectedDatabase) {
logger.log(Level.SEVERE, "Set selectedDB is invoked");
this.selectedDatabase = selectedDatabase;
}
SelectOneMenu with Pojo classes is needed a JSf converter between page and managed bean. Converter converts string from page to objects in managed beans.
Add converter attribute to SelectOneMenu
See also
BalusC SelectOneMenu tutorial