tutorial showcase framework etiquetas español ejemplo java jsf facelets mojarra jrebel

java - framework - primefaces showcase



JSF y recarga automática de archivos xhtml (2)

Tuve algunos problemas con la recarga en caliente de archivos XHTML usando JRebel, Spring, JSF Mojarra 2.0.3 y WebLogic 10.3.

JRebel vuelve a cargar las clases regulares de Java y los archivos js / css en / WebContent con éxito, pero no los archivos .xhtml de JSF. Se necesitaba una nueva publicación completa para actualizar los archivos xhtml en el servidor.

Por prueba y error finalmente conseguí que funcionara agregando algunos parámetros de facelets a web.xml y creando un ResourceResolver personalizado como se describe en esta publicación del blog .

Sin embargo, me pregunto POR QUÉ esto funciona, y más específicamente:

  • ¿Por qué se necesita un ResourceResolver personalizado?
  • ¿No se supone que JRebel maneje esto al monitorear / contenido de la Web donde residen los archivos xhtml?
  • Supongo que tiene algo que ver con Facelets / JSF compilando xhtml en servlets (?) A través de FacesServlet que JRebel no puede detectar.

Así es como lo arreglé para mí:

  1. Verifique que el complemento de facelets esté habilitado en su configuración de JRebel y
  2. Verifica que estés usando Project Stage Development en tu web.xml

JRebel maneja / Cambios en la carpeta WebContent.

El problema es que Facelets realiza el almacenamiento en caché y no vuelve a leer los archivos modificados. Para forzar la releer, especifique los siguientes parámetros en web.xml .

JSF 2 (Facelets 2.x):

<!-- Time in seconds that facelets should be checked for changes since last request. A value of -1 disables refresh checking. --> <context-param> <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name> <param-value>0</param-value> </context-param> <!-- Set the project stage to "Development", "UnitTest", "SystemTest", or "Production". --> <!-- An optional parameter that makes troubleshooting errors much easier. --> <!-- You should remove this context parameter before deploying to production! --> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param>

Para JSF 1.2 (Facelets 1.x) los parámetros son:

<context-param> <param-name>facelets.REFRESH_PERIOD</param-name> <param-value>0</param-value> </context-param> <context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value> </context-param>

Más información sobre los parámetros de contexto JSF: http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

Esa resolución de recursos personalizada no es necesaria en su caso. La resolución de recursos es solo una manera difícil de obtener archivos xhtml de la carpeta del sistema de archivos personalizado. En su caso, JRebel hace eso (y aún más).