domingo, 7 de diciembre de 2014

Tablas en PrimeFaces no se refrescan al usar filtros [Java]

Qué tal amigo, nuevamente me encuentro de regreso por aquí, el día de hoy de mostraré una forma de resetear los filtros de las tablas en PrimeFaces.

Lo anterior se me hace algo interesante y útil cuando te sucede como a mi. Me encuentro realizando un proyecto de la Universidad y consta de algunas pantallas que para mostrar registros previamente guardados utilizo una tabla <p:table> que contiene filtros en cada columna <p:column>.

Para comenzar proporciono un archivo .xhtml en el cual tengo una tabla con tan solo 3 columnas.

aula.xhtml



Mi archivo anterior tiene asociado un Bean que funge como Controlador para todas las funcionas que desempeña este, por lo cual también muestro su contenido.

AulaController.java



Bueno y tu dirás, ¿Y para que quiero ver todo ese código?, bueno es básicamente para mostrarte el funcionamiento completo de la pantalla.

Cuando desde el navegador se despliega el proyecto y se tiene acceso a la pantalla lo primero que sucederá es que cargará la lista de aulas y las renderiza en la tabla con id tabla-aulas.

Dicha tabla se compone de 3 columnas: Aula, Descripción y Opciones, las 2 primeras cuentan con filtros (identificar los atributos filterMatchMode y filterBy).

Ahora, si vemos más adelante tenemos un formulario con id frm-creacion el cual permite crear nuevas aulas.

Observa con atención un commandButton que tiene un actionListener que llama a un método del Bean guardarAula().

El problema que tenía era el siguiente: Se muestra la página, ingreso datos para una nueva aula, doy clic en guardar [refresco la tabla y se muestra mi nuevo registro] y hasta aquí todo bien. Utilizo mi filtro de la columna de aula, busco algo, limpio el filtro, ingreso nuevos datos para un aula y doy clic en guardar [refresco la tabla] y ¡Boom! no aparece por ningún lado mi registro, mis logs me dicen que se hizo bien el alta del aula pero mi tabla jamás los muestra. La solución fue la siguiente:

Si buscas en AulaController el método guardarAula() te darás cuenta que hago uso de otro método más:

resetearFitrosTabla("frm-aulas:tabla-aulas");

Bien, este método es de la clase padre AbstractController pero para no publicar completa esta clase te comparto que es lo que hace realmente el método:



Listo, a partir del findComponent() obtengo la tabla del xhtml pasando como parámetro el id de la tabla (En el ejemplo  del método guardarAula como la tabla no se encuentra en el mismo formulario que el botón desde donde llamo el método el parametro esformulario:tabla y equivale a frm-aulas:tabla-aulas) para después únicamente con la instancia obtenida y guardada en el objeto table usar el método reset(), y con estas 2 sencillas líneas logro que mi tabla se refresque aún cuando halla utilizado los filtros.

Bueno, espero lo anterior te sea de ayuda, aquí una captura de la pantallita por si te da curiosidad, saludos y nuevamente bienvenido.



    Choose :
  • OR
  • To comment
9 comentarios:
Write comentarios
  1. Amigo muchas gracias, me ayudo muchísimo, tenia el mismo problema y no encontraba nada, gracias !!

    ResponderEliminar
  2. Muchas gracias Jeses Alberto! Llevo una mañana completa intentando resolver el mismo problema y no daba con la tecla.

    Me ha sido de gran ayuda!

    Saludos.

    ResponderEliminar
  3. Tengo una duda, ya que a mi me filtra bien los datos pero cuando voy a seleccionar un numero de la paginación no filtra y muestra todos los resultados

    ResponderEliminar
  4. Tengo una duda, ya que a mi me filtra bien los datos pero cuando voy a seleccionar un numero de la paginación no filtra y muestra todos los resultados

    ResponderEliminar
  5. Gracias, ya no sabia como solucionar eso...

    ResponderEliminar
  6. Muchas gracias, me sirvió, busque esto por varios sitios y nada

    ResponderEliminar
  7. Muchas gracias, me sirvió muchísimo, no encontraba como solucionarlo.

    ResponderEliminar
  8. no sirvió tu mamada esa, pinche pendejo

    ResponderEliminar
  9. Funciona, buena alternativa ...

    ResponderEliminar