Integrar FCKeditor con MyFaces

FCKeditor es probablemente uno de los editores WYSIWYG más conocidos y utilizados.
Gracias a la librería FCK Faces, podemos utilizar éste editor nativamente en MyFaces como un componente más y olvidarnos de usar javascript. Quizás funcione en otras implementaciones de JSF, pero parece los mismos creadores sólo aseguran que funcione correctamente en la implementación de apache.

Para poder utilizar éste componente, después de habernos descargado el .jar, necesitamos añadir un servlet a nuestro web.xml:

[servlet]
[servlet-name]FCKServlet[/servlet-name]
[servlet-class]org.fckfaces.util.Servlet[/servlet-class]
[/servlet]
[servlet-mapping]
[servlet-name]FCKServlet[/servlet-name]
[url-pattern]/fckfaces/*[/url-pattern]
[/servlet-mapping]

En el jsp añadimos el taglib:

[%@taglib uri="http://www.fck-faces.org/fck-faces" prefix="fck"%]

Y ya podemos utilizarlo:

[fck:editor value="valor_de_ejemplo" width="100%" toolbarSet="Basic"/]

Usar Facelets con Tomahawk

Después de empezar a usar facelets, necesitaba utilizar, cómo no, los componentes de myfaces tomahawk, para esto hay una documentación muy buena en el wiki de apache, use facelets with tomahawk.

El primer paso que debemos dar es crear un taglib.xml que describa cada componente, está recomendado llamarlo tomahawk.taglib.xml por si necesitaramos añadir alguno más, podemos utilizar el que está puesto como ejemplo en el wiki.

También debemos añadir en el web.xml un context-param con param-name facelets.LIBRARIES con el param-value que apunte dónde está nuestro taglib, ej:/WEB-INF/tomahawk.taglib.xml.

Con esto nos funcionarían casi todos los componentes, pero en el caso del updateActionListener no funcionaría, en JSF 1.2 se puede usar el equivalente del core setPropertyActionListener, pero en mi caso al utilizar la implementación de myfaces 1.1.5, que es una implementación de la especificación JSF 1.1, necesitaba este componente. Para poder utilizarlo, es necesario, descomentar la línea que describe el componente updateActionListener, y descargarnos el .jar TagHandler de jsf-comp y añadirlo a nuestro proyecto.

Empezando con Facelets

Estoy teniendo mis primeros contactos con Facelets, un sistema de plantillas para JavaServer Faces, lo que sería un tiles para struts.

Ha sido bastante fácil utilizar Facelets en una micro-aplicación de ejemplo de JSF, sobre todo gracias a la buena documentación que tiene el proyecto.

Para utilizarlo me ha sido necesario modificar lo siguiente:
-La configuración de web.xml poniendo un context-param javax.faces.DEFAULT_SUFFIX con value .html y otro facelets.DEVELOPMENT con value a true para tener, durante el desarrollo, salida de debug por el navegador.
-La de faces-config.xml poniéndole un view-handler, com.sun.facelets.FaceletViewHandler.
-Crear un template para las vistas.
-Modificar los nombres de archivos que utilizan JSF de .jsp a .html y en los archivos modificar lo necesario para dejarlos
con el formato de páginas facelets, quitando los taglib y f:view…
-Y modificando también las reglas de navegación de faces-config, cambiándoles la extensión de los archivos de .jsp a .html.

Una de las cosas que me ha parecido muy buena idea dentro de Facelets, es el poder utilizar de una forma alternativa los tags de jsf, al menos para los componentes del core de JSF pero supongo que para cualquier otro, utilizando etiquetas html de siempre con un atributo jsfc que dice cuál es el tag JSF que debe renderizar. Lo que a un diseñador/maquetador creo que le facilita bastante la vida al no tener que aprenderse los tags de JSF.

Renderiza cualquier tag HTML con htmlTag (JSF)

Estoy empezando a aprender JavaServer Faces gracias al curso de javaconganas.
Como curiosidad, estaba intentando colocar saltos de línea(br) dentro de un h:column entre otros dos componentes, acostumbrado a struts, y me he encontrado con que no se renderizaban.

Finalmente he encontrado entre los componentes de tomahawk el htmlTag.

Su uso es muy simple, tan sólo poniendo:

[ htmlTag value="br"/]

O
[ htmlTag value="div"] componenteJSF[ /htmlTag]

(Sustituir los corchetes por los símbolos mayor y menor)