5 Replies Latest reply on Nov 17, 2010 11:22 AM by Agustin Sivoplás Ferrari

    Optimizing filterby in rich:dataTable

    Agustin Sivoplás Ferrari Expert

      I'm using a rich:dataTable to list users, the problem is that i have 7800 users in the table but when i filter by a column (name, last name, etc), i have a big delay of 40 seg to recieve the response.

       

      Captura.PNG

       

      The code:

       

      <rich:dataTable id="items" value="#{usuarioBean.usuariosModel}" var="usuario" rows="15" styleClass="datatableStyle">
           <rich:column>
           <f:facet name="header">
                <h:outputText id="a" value="#{msg.idUsuarioLabel}"/>
           </f:facet>
           <h:outputText id="aa" value="#{usuario.idUsuario}"/>
           </rich:column>
      
           <rich:column sortBy="#{usuario.nombre}" filterBy="#{usuario.nombre}" filterEvent="onkeyup" filterValue="#{usuarioBean.strNombreFiltro}">
              <f:facet name="header">
                <h:outputText id="b" value="#{msg.nomUsuarioLabel}" />
              </f:facet>
           <h:outputText id="bb" value="#{usuario.nombre}"/>
           </rich:column>
      
           <rich:column sortBy="#{usuario.apellido}" filterBy="#{usuario.apellido}" filterEvent="onkeyup" filterValue="#{usuarioBean.strApellidoFiltro}">
           <f:facet name="header">
                <h:outputText id="c" value="#{msg.apeUsuarioLabel}"/>
           </f:facet>
           <h:outputText id="cc" value="#{usuario.apellido}"/>
           </rich:column>
      
           <rich:column sortBy="#{usuario.nomUsuario}" filterBy="#{usuario.nomUsuario}" filterEvent="onkeyup" filterValue="#{usuarioBean.strNomUsuFiltro}">
              <f:facet name="header">
                <h:outputText id="f" value="#{msg.nickUsuarioLabel}"/>
           </f:facet>
           <h:outputText id="ff" value="#{usuario.nomUsuario}"/>
           </rich:column>
                          
           <rich:column sortBy="#{usuario.reparticion.nomReparticion}" filterBy="#{usuario.reparticion.nomReparticion}" filterEvent="onkeyup" filterValue="#{usuarioBean.strDepartamentoFiltro}"> 
              <f:facet name="header">
                <h:outputText id="repUser" value="#{msg.reparticionLabel}"/>
           </f:facet>
           <h:outputText id="repUserVal" value="#{usuario.reparticion.nomReparticion}"/>
           </rich:column>
                          
           <rich:column styleClass="columnaCentrada" rendered="#{securityBean.modificarUsuario}">
                <f:facet name="header">
           </f:facet>
           <h:commandLink id="editUsuario" action="#{usuarioBean.editUsuario}">
                <h:graphicImage value="/images/bt_edit.png"/>
                <rich:toolTip value="#{msg.editLabel}" showDelay="1000"/>
           </h:commandLink>
           </rich:column>
      
           <rich:column styleClass="columnaCentrada" rendered="#{securityBean.modificarUsuario}">
           <f:facet name="header">
           </f:facet>
           <a4j:commandLink id="removeUsuario" oncomplete="#{rich:component('deletePanel')}.show()" limitToList="true" reRender="deletePanel" ajaxSingle="true">
                <h:graphicImage value="/images/bt_delete.png"/>
                <rich:toolTip value="#{msg.removeLabel}" showDelay="1000"/>
                <a4j:actionparam name="idUsuarioEliminar" value="#{usuario.idUsuario}" assignTo="#{usuarioBean.idUsuarioEliminar}"/>
           </a4j:commandLink>
           </rich:column>
      </rich:dataTable>
      

      <rich:dataTable id="items" value="#{usuarioBean.usuariosModel}"
      var="usuario" rows="15" styleClass="datatableStyle">
      <rich:column>
      <f:facet name="header">
      <h:outputText id="a" value="#{msg.idUsuarioLabel}"/>
      </f:facet>
      <h:outputText id="aa" value="#{usuario.idUsuario}"/>
      </rich:column>
      <rich:column sortBy="#{usuario.nombre}" filterBy="#{usuario.nombre}" filterEvent="onkeyup" filterValue="#{usuarioBean.strNombreFiltro}">
      <f:facet name="header">
      <h:outputText id="b" value="#{msg.nomUsuarioLabel}" />
      </f:facet>
      <h:outputText id="bb" value="#{usuario.nombre}"/>
      </rich:column>
      <rich:column sortBy="#{usuario.apellido}" filterBy="#{usuario.apellido}" filterEvent="onkeyup" filterValue="#{usuarioBean.strApellidoFiltro}">
      <f:facet name="header">
      <h:outputText id="c" value="#{msg.apeUsuarioLabel}"/>
      </f:facet>
      <h:outputText id="cc" value="#{usuario.apellido}"/>
      </rich:column>
      <rich:column sortBy="#{usuario.nomUsuario}" filterBy="#{usuario.nomUsuario}" filterEvent="onkeyup" filterValue="#{usuarioBean.strNomUsuFiltro}">
      <f:facet name="header">
      <h:outputText id="f" value="#{msg.nickUsuarioLabel}"/>
      </f:facet>
      <h:outputText id="ff" value="#{usuario.nomUsuario}"/>
      </rich:column>
      <rich:column sortBy="#{usuario.reparticion.nomReparticion}" filterBy="#{usuario.reparticion.nomReparticion}" filterEvent="onkeyup" filterValue="#{usuarioBean.strDepartamentoFiltro}">
      <f:facet name="header">
      <h:outputText id="repUser" value="#{msg.reparticionLabel}"/>
      </f:facet>
      <h:outputText id="repUserVal" value="#{usuario.reparticion.nomReparticion}"/>
      </rich:column>
      <rich:column styleClass="columnaCentrada" rendered="#{securityBean.modificarUsuario}">
      <f:facet name="header">
      </f:facet>
      <h:commandLink id="editUsuario" action="#{usuarioBean.editUsuario}">
      <h:graphicImage value="/images/bt_edit.png"/>
      <rich:toolTip value="#{msg.editLabel}" showDelay="1000"/>
      </h:commandLink>
      </rich:column>
      <rich:column styleClass="columnaCentrada" rendered="#{securityBean.modificarUsuario}">
      <f:facet name="header">
      </f:facet>
      <a4j:commandLink id="removeUsuario" oncomplete="#{rich:component('deletePanel')}.show()" limitToList="true" reRender="deletePanel" ajaxSingle="true">
      <h:graphicImage value="/images/bt_delete.png"/>
      <rich:toolTip value="#{msg.removeLabel}" showDelay="1000"/>
      <a4j:actionparam name="idUsuarioEliminar" value="#{usuario.idUsuario}" assignTo="#{usuarioBean.idUsuarioEliminar}"/>
      </a4j:commandLink>
      </rich:column>
      </rich:dataTable>

      Thanks in advanced!