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.