Publicado el Dejar un comentario

Primefaces: datatable editable no regresa el nuevo valor de la celda ni la rowkey en el evento CellEditEvent.

Antes que nada ¡Feliz año nuevo a todos! Que cumplan todas sus metas este año y en los venideros…

Ahora si, entremos en materia. Actualmente trabajo con la versión 5.3 de Primefaces y todo iba correctamente hasta que me topé con esta cuestión. El evento CellEditEvent no me regresaba valores en los métodos getNewValue y getRowKey. El primero se supone que me debería regresar el nuevo valor capturado en la celda y el segundo el valor único que identificaba a la fila (row) del DataTable sin embargo no era así. Así que me puse a buscar y las soluciones que daban, no funcionaban. Hasta que me puse a examinar minuciosamente los ejemplos del sitio de Primefaces (showcase) y compararlo con mi código y ahí resolví una de las incógnitas:

Mientras que el código de mi CDI bean obtenía los datos que llenaban la datatable de un método que hacía una consulta a la base de datos, en el ejemplo, la cargaban de una propiedad en el bean que era inicalizada previamente al construir el bean a través de un método etiquetado @PostConstruct; cabe aclarar que ambos bean tenian el alcance @ViewScoped. Así que procedí a agregar una propiedad en mi bean y el método que la inicializara con los datos de la base de datos  y agregar su respectivo getter y setter. ¡Vualá! El evento CellEditEvent me regresó el nuevo valor de la celda, sin embargo el valor RowKey de la fila donde se encontraba la celda editada seguía sin tener valor.  En los ejemplos no mostraban como obtener este dato, sólo mostraban como obtener el nuevo y antiguo valor.

Para resolver la segunda incógnita, volví a busca ahora algo de como obtener el RowKey en el evento pero no encontré mucha información, sin embargo en las páginas relacionaban mucho el RowKey con los métodos de selección  del DataTable así que le agregué la propiedad selectionMode=”single” a la datatable y ¡eureka! ¡el evento CellEditEvent me regresó el valor requerido!

En resumen, para solucionar el problema fue necesario agregar una propiedad local en el CDI bean que almacenara la lista de datos que llenarían el DataTable y en la definición de la datatable, en el archivo .xhtml, añadir y asignar “single” a la propiedad selectionMode.

Espero les sirva. ¡No se olviden de visitar a los patrocinadores!

Publicado el Dejar un comentario

java.lang.IllegalStateException: getOutputStream() has already been called for this response. Glassfish 4.1.1.

Desde hace un tiempo, utilizo Glassfish como servidor de aplicaciones en mis desarrollos web con Java. Sin embargo en el proyecto que actualmente trabajo, al descargar la última versión y querer añadir un nuevo pool de conexiones, la consola de administración gráfica de Glassfish 4.1.1 me arroja el siguiente error:

java.lang.IllegalStateException: getOutputStream() has already been called for this response.

Buscando la causa me encuentro que es un bug en esta nueva versión de Glassfish que aún no ha sido resuelto. Hay que recordar que Oracle dejó de dar soporte sobre este producto y por lo tanto, las correcciones de errores son más lentas que antes. En el misma dirección donde se reporta este bug se indica algunas soluciones.

Dentro de las soluciones, me enteré que existe una empresa que ha empezado otro desarrollo en base al código de Glassfish y realiza funciones de mantenimiento más prontas: Payara Server. Lo he descargado y funciona perfectamente hasta el momento. De ahora en adelante utilizaré este servidor de aplicaciones en futuros desarrollos.

¡Felices fiestas!

(Por favor visita a los patrocinadores).

 

Publicado el Dejar un comentario

Ubuntu 14.04: mount: unknown filesystem type ‘exfat’

Este error lo marca Ubuntu al querer montar un disco externo que fué formateado con el tipo de sistema de archivos exFAT. Por defecto Ubuntu no instala los paquetes necesarios para montar este tipo, así que es necesario instalar los paquetes necesarios. Para eso ejecutamos en una ventana de terminal las órdenes siguientes:

$ sudo apt-get install exfat-fuse exfat-utils

Una vez instalados, será posible montar este disco externo o memoria USB. No olvides visitar a los patrocinadores, dando un click en los anuncios. Me ayudas a seguir conservando este sitio.

¡Gracias!