ExtendedDatatable NoRowAvailable Exception
zeroshade Oct 5, 2011 12:03 PMHello Everyone, I'm using an extended DataTable to support selecion of rows and execute some server code when the selectionChange event happens. For this I have the following table:
<rich:extendedDataTable value="#{empresaDM.empresa.direccionEmpresas}" var="direccionEmpresa" rows="10" noDataLabel="#{messages.tableEmptyMessage}" selectionMode="single" > <a4j:ajax execute="@this" event="selectionchange" listener="#{empresaController.tablesRowSelectionListener}"> </a4j:ajax> <f:facet name="header"> <h:outputText value="#{labels.direccionSP}" /> </f:facet> <rich:column> <f:facet name="header"> <h:outputText value="#{labels.predeterminado}" /> </f:facet> <a4j:outputPanel rendered="#{direccionEmpresa ne empresaDM.direccionEmpresaSeleccionada}"> <h:outputText value="#{direccionEmpresa.stsPredeterminado}" /> </a4j:outputPanel> <a4j:outputPanel rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}"> <h:inputText value="#{direccionEmpresa.stsPredeterminado}"/> </a4j:outputPanel> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="#{labels.sector}" /> </f:facet> <a4j:outputPanel rendered="#{direccionEmpresa ne empresaDM.direccionEmpresaSeleccionada}""> <h:outputText value="#{direccionEmpresa.txtSector}" /> </a4j:outputPanel> <a4j:outputPanel rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}"> <h:inputText value="#{direccionEmpresa.txtSector}"/> </a4j:outputPanel> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="#{labels.calle_principal}" /> </f:facet> <a4j:outputPanel rendered="#{direccionEmpresa ne empresaDM.direccionEmpresaSeleccionada}"> <h:outputText value="#{direccionEmpresa.txtCallePrincipal}" /> </a4j:outputPanel> <a4j:outputPanel rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}"> <h:inputText value="#{direccionEmpresa.txtCallePrincipal}"/> </a4j:outputPanel> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="#{labels.numero}" /> </f:facet> <a4j:outputPanel rendered="#{direccionEmpresa ne empresaDM.direccionEmpresaSeleccionada}"> <h:outputText value="#{direccionEmpresa.txtNumero}" /> </a4j:outputPanel> <a4j:outputPanel rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}"> <h:inputText value="#{direccionEmpresa.txtNumero}"/> </a4j:outputPanel> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="#{labels.calle_secundaria}"/> </f:facet> <a4j:outputPanel rendered="#{direccionEmpresa ne empresaDM.direccionEmpresaSeleccionada}"> <h:outputText value="#{direccionEmpresa.txtCalleSecundaria}" /> </a4j:outputPanel> <a4j:outputPanel rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}"> <h:inputText value="#{direccionEmpresa.txtCalleSecundaria}"/> </a4j:outputPanel> </rich:column> <rich:column > <f:facet name="header"> <h:outputText value="#{labels.informacion_adicional}" /> </f:facet> <a4j:outputPanel rendered="#{direccionEmpresa ne empresaDM.direccionEmpresaSeleccionada}"> <h:outputText value="#{direccionEmpresa.txtInformacionAdicional}" /> </a4j:outputPanel> <a4j:outputPanel rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}"> <h:inputText value="#{direccionEmpresa.txtInformacionAdicional}"/> </a4j:outputPanel> </rich:column> <rich:column> <a4j:commandButton value="DONE" render="direccionEmpresaTable" rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}"> <f:setPropertyActionListener target="#{empresaDM.direccionEmpresaSeleccionada}" value="#{null}" /> </a4j:commandButton> <a4j:commandLink rendered="#{direccionEmpresa eq empresaDM.direccionEmpresaSeleccionada}" render="direccionEmpresaTable" action="#{empresaController.eliminarDireccion}"> <h:graphicImage library="images" name="ic_eliminar.gif" styleClass="button-link"/> </a4j:commandLink> </rich:column> </rich:extendedDataTable>
And my listener has the following code:
public void tablesRowSelectionListener(AjaxBehaviorEvent event){ UIExtendedDataTable dataTable=(UIExtendedDataTable)event.getComponent(); Object selectedRow=dataTable.getRowData(); if(selectedRow instanceof Empresa){ empresaMarcada=(Empresa)selectedRow; }else if(selectedRow instanceof DireccionEmpresa){ empresaDM.setDireccionEmpresaSeleccionada((DireccionEmpresa)selectedRow); }else if(selectedRow instanceof TelefonoEmpresa){ empresaDM.setTelefonoEmpresaSeleccionada((TelefonoEmpresa)selectedRow); }else if(selectedRow instanceof Usuario){ empresaDM.setAdministradorSeleccionada((Usuario)selectedRow); }else if(selectedRow instanceof Contacto){ empresaDM.setContactoEmpresaSeleccionada((Contacto)selectedRow); } }
However when I get to the dataTable.getRowData(), I'm gettin NoRowAvailableException,
Why this could be hapenning thanks a lot.