2011-09-22 10 views
19

ho avuto alcuni problemi con i file a caldo ricaricare XHTML utilizzando JRebel, Primavera, JSF Mojarra 2.0.3 e WebLogic 10.3.JSF e ricarica automatica dei file XHTML

JRebel ricarica classi regolari Java e JS/CSS file sotto/WebContent con successo, ma non i file .xhtml del JSF. È stata necessaria una ripubblicazione completa per ottenere file xhtml aggiornati sul server.

Per tentativi ed errori finalmente ho funzionato aggiungendo alcuni parametri facelets a web.xml e creando un ResourceResolver personalizzato come descritto in this blog post.

Tuttavia, mi chiedo perché questo funziona, e più precisamente:

  • Perché un ResourceResolver personalizzato necessario?
  • Non è possibile che JRebel lo gestisca monitorando/WebContent dove risiedono i file xhtml?
  • Sto indovinando che ha qualcosa a che fare con Facelets/JSF compilazione xhtml al servlet (?) Attraverso FacesServlet che JRebel non è in grado di rilevare?

risposta

37

JRebel gestisce/webcontent modifiche alle cartelle.

Il problema è che Facelets fare caching e non rileggere i file modificati. Per forzare la rilettura, specificare i seguenti parametri in web.xml.

JSF 2 (Facelet 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> 

Per JSF 1.2 (Facelet 1.x) parametri sono:

<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> 

più su contesto JSF params: http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

Questo risolutore di risorse personalizzato non è necessario nel tuo caso. Questo risolutore di risorse è solo un modo complicato per ottenere file xhtml dalla cartella del file system personalizzato. Nel tuo caso, JRebel lo fa (e anche di più).

+0

Credo che JRebel lo faccia già implicitamente. Almeno, ecco qui. Si noti che i parametri di contesto sono specifici di Facelets 1.x e che OP sta utilizzando Facelets 2.x. – BalusC

+0

@Balusc Grazie per la risposta, la risposta aggiornata per essere Facelets 2.x specifico. – Andrey

+0

impostazione 'javax.faces.FACELETS_REFRESH_PERIOD' a' 0 'e 'javax.faces.PROJECT_STAGE' a' Development' non sembra innescare modelli aggiornati con JRebel sul JSF 2.0.4 e WebLogic 10.3. – uggedal

1

Ecco come ho risolto questo per me:

  1. Verificare che facelets plugin sia abilitato nelle impostazioni JRebel &
  2. Verificare che si sta utilizzando Project StageDevelopment nel vostro web.xml
Problemi correlati