26 Stimmen

JSF und automatisches Nachladen von Xhtml-Dateien

Ich hatte einige Probleme mit dem Hot-Reloading von XHTML-Dateien mit JRebel, Spring, JSF Mojarra 2.0.3 und WebLogic 10.3.

JRebel lädt die regulären Java-Klassen und js/css-Dateien unter /WebContent erfolgreich neu, nicht aber die JSF-.xhtml-Dateien. Eine vollständige Neuveröffentlichung war notwendig, um die xhtml-Dateien auf dem Server zu aktualisieren.

Durch Versuch und Irrtum habe ich es schließlich zum Funktionieren gebracht, indem ich einige Facelets-Parameter zur web.xml hinzugefügt und einen benutzerdefinierten ResourceResolver wie beschrieben erstellt habe in diesem Blogeintrag .

Ich frage mich jedoch, WARUM das funktioniert, und zwar ganz konkret:

  • Warum wird ein eigener ResourceResolver benötigt?
  • Sollte JRebel dies nicht durch die Überwachung von /WebContent, wo sich die xhtml-Dateien befinden, erledigen?
  • Ich vermute, es hat etwas mit Facelets/JSF zu tun, die xhtml über FacesServlet zu Servlets(?) kompilieren, die JRebel nicht erkennen kann?

48voto

Andrey Punkte 6277

JRebel behandelt Änderungen im Ordner /WebContent.

Das Problem ist, dass Facelets eine Zwischenspeicherung vornehmen und geänderte Dateien nicht erneut einlesen. Um das erneute Einlesen zu erzwingen, geben Sie die folgenden Parameter in 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) Parameter sind:

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

Mehr zu JSF-Kontextparametern: http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

Der benutzerdefinierte Ressourcenauflöser ist in Ihrem Fall nicht erforderlich. Der Ressourcenauflöser ist nur ein trickreicher Weg, um Xhtml-Dateien aus einem benutzerdefinierten Dateisystemordner zu erhalten. In Ihrem Fall tut JRebel das (und noch mehr).

1voto

Rajat Gupta Punkte 24634

Ich habe das für mich folgendermaßen gelöst:

  1. Prüfen Sie, ob facelets Plugin in Ihren JRebel-Einstellungen aktiviert ist &
  2. Vergewissern Sie sich, dass Sie Folgendes verwenden Project Stage Development in Ihrem web.xml

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X