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.
9 comentarios:
Write comentariosAmigo muchas gracias, me ayudo muchísimo, tenia el mismo problema y no encontraba nada, gracias !!
ResponderEliminarMuchas gracias Jeses Alberto! Llevo una mañana completa intentando resolver el mismo problema y no daba con la tecla.
ResponderEliminarMe ha sido de gran ayuda!
Saludos.
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
ResponderEliminarTengo 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
ResponderEliminarGracias, ya no sabia como solucionar eso...
ResponderEliminarMuchas gracias, me sirvió, busque esto por varios sitios y nada
ResponderEliminarMuchas gracias, me sirvió muchísimo, no encontraba como solucionarlo.
ResponderEliminarno sirvió tu mamada esa, pinche pendejo
ResponderEliminarFunciona, buena alternativa ...
ResponderEliminar