Columnas dinámicas con JSF

En este post voy a explicar cómo realizar una tabla de columnas dinámicas con JSF. Esta solución se basa en la librería de etiquetas JSF de Apache Trinidad, por lo que podremos aplicarla a cualquier implementación y versión de JSF. Yo recomiendo utilizar la implementación de Apache MyFaces.

Muchas veces, la versión de JSF a utilizar viene determinada por el entorno de ejecución. Por ejemplo, la versión 1.2 de JSF requiere servlet 2.5 y jsp 2.1, sólo implementada por Tomcat 6.x. Por lo que si vamos a ejecutar la aplicación en un contenedor Tomcat 5.5 tendremos que optar por la versión 1.1 de JSF.

Navegar a un enlace interno tras un action en JSF

En este post voy a dar una solución a un problema común que consiste en navegar a un enlace interno tras pulsar en un botón o en un enlace que ejecuta una acción en el servidor.

Si simplemente quisiéramos navegar a un enlace interno sin ejecutar nada en el servidor podríamos hacerlo con un outputLink:

<h:outputLink value="pagina.jsf#ancla" ><h:outputText value="Ir a la página"/> </h:outputLink>

Sin embargo, puede que lo que necesitemos es ejecutar un método en el servidor y luego navegar hacia un ancla. Esto podemos hacerlo con un método actionListener al que enviaremos el nombre del ancla y que se encargará de redireccionar al usuario al ancla especificada tras hacer su trabajo.

Proyectos en los que participo

El motivo de esta entrada es que conozcáis los proyectos en los que estoy involucrado y soy propietario.

En primer lugar el proyecto rolemaster. Este proyecto es un asistente para RMSS (Rolemaster Standard System). RMSS es un juego de rol ya descatalogado pero que seguimos practicando mis amigos y yo. Decidimos crear esta aplicación con el objetivo de facilitar la dirección del juego de forma que no se perdiera tanto tiempo consultando las reglas una y otra vez. Cabe mencionar que la principal característica de este juego con respecto a otros similares es que existe una tabla y una regla para todo, lo que provoca que muchas veces todo vaya muy lento. El proyecto está alojado en Google Code en la siguiente URL:
El proyecto está elaborado en JSF y JPA (se ha elegido Hibernate como implementación) y precisa de una Base de Datos MySQL. Las mejoras que se están barajando son:
  • Hacer que la BBDD sea una SQLite o alguna similar para que pueda estar empotrada en el proyecto.
  • Actualmente el asistente sólo controla la experienciaspor lo que se está pensando en ampliar el asistente al combate y otras situaciones.
El otro proyecto en el que estoy involucrado es discography-generator. Este proyecto consiste en generar una aplicación HTML a partir de carpetas con MP3 de forma que podamos navegar por las páginas web e ir escuchando las canciones. Está pensado para gestionar discografías de forma que tengas una aplicación web por cada discografía y puedas ir navegando este los distintos discos, escuchándo las canciones.

Nota: No incluye ni descaga MP3 alguno, debes tenerlos en el disco duro.

Este proyecto también está alojado en Google Code:
Está elaborado en Swing y precisa de Java 1.6. Actualmente genera la aplicación web, pero se encuentra en una fase de desarrollo muy temprana y precisa de muchas mejoras que puedes consultar en la lista de Issues.