2011-09-22 24 views
19

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

JRebel recarga correctamente las clases Java normales y los archivos js/css en/WebContent, pero no los archivos .xhtml de JSF. Se necesitaba una republica completa para obtener los archivos xhtml actualizados en el servidor.

Por prueba y error Finalmente logré que funcione agregando algunos parámetros de facelets a web.xml y creando un ResourceResolver personalizado como se describe en in this blog post.

Sin embargo, me pregunto por qué esto funciona, y más concretamente:

  • Por qué se necesita un ResourceResolver personalizada?
  • ¿No se supone que JRebel maneja esto supervisando/WebContent donde residen los archivos xhtml?
  • Supongo que tiene algo que ver con Facelets/JSF que compila xhtml a servlets (?) A través de FacesServlet que JRebel no puede detectar.

Respuesta

37

Cambios en la carpeta JRebel/Cambios en la carpeta WebContent.

El problema es que Facelets do caching y no vuelve a leer los archivos cambiados. Para forzar la relectura, 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) 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 en contexto JSF params: 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. Esa resolución de recursos es solo una forma complicada de obtener archivos xhtml de la carpeta personalizada del sistema de archivos. En tu caso, JRebel hace eso (y aún más).

+0

Creo que JRebel ya lo hace implícitamente. Al menos, aquí lo tiene. Tenga en cuenta que sus parámetros de contexto son Facelets 1.x específicos y que OP está utilizando Facelets 2.x. – BalusC

+0

@Balusc Gracias por responder, la respuesta se actualizó para ser específica de Facelets 2.x. – Andrey

+0

Establecer 'javax.faces.FACELETS_REFRESH_PERIOD' en' 0' y 'javax.faces.PROJECT_STAGE' en' Desarrollo' no parece activar las plantillas actualizadas con JRebel en JSF 2.0.4 y WebLogic 10.3. – uggedal

1

Así es como me fijo esto para mí:

  1. Compruebe que facelets plugin está habilitado en la configuración de JRebel &
  2. Compruebe que está utilizando Project StageDevelopment en su web.xml
Cuestiones relacionadas