web-dev-qa-db-ja.com

JSFおよびxhtmlファイルの自動リロード

JRebel、Spring、JSF Mojarra 2.0.3、およびWebLogic 10.3を使用したXHTMLファイルのホットリロードで問題が発生しました。

JRebelは通常のJavaクラスとjs/cssファイルを/ WebContentの下に正常に再ロードしますが、JSFの.xhtmlファイルは再ロードしません。サーバーでxhtmlファイルを更新するには、完全な再公開が必要でした。

試行錯誤の末、私はようやくいくつかのfaceletsパラメーターをweb.xmlに追加し、説明されているようにカスタムResourceResolverを作成することで、この機能を動作させました このブログ投稿で

しかし、なぜこれが機能するのか、より具体的には:

  • なぜカスタムResourceResolverが必要なのですか?
  • JRebelは、xhtmlファイルが存在する/ WebContentを監視することによってこれを処理するはずではありませんか?
  • JRebelが検出できないFacesServletを介してFacelets/JSFがxhtmlをサーブレット(?)にコンパイルすることと関係があると思いますか?
26
Mads Mobæk

JRebelは/ WebContentフォルダーの変更を処理します。

問題は、Faceletsがキャッシュを行い、変更されたファイルを再読み取りしないことです。強制的に再読み込みするには、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>

JSF 1.2(Facelets 1.x)パラメータの場合:

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

JSFコンテキストパラメータの詳細: http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

このカスタムリソースリゾルバーは、あなたのケースでは必要ありません。そのリソースリゾルバーは、カスタムファイルシステムフォルダーからxhtmlファイルを取得するためのトリッキーな方法です。あなたの場合、JRebelがそれを行います(さらにそれ以上)。

46
Andrey

これが私のためにこれを修正した方法です:

  1. JRebel設定でfaceletsプラグインが有効になっていることを確認します&
  2. Project Stageweb.xmlDevelopmentを使用していることを確認します
1
Rajat Gupta