2012-02-15 15 views
12

いつものように、私は少し混乱しています。JSF faceletsテンプレートパッケージ

ここでhttps://community.jboss.org/wiki/ModularWebAppsWithJSF2 JSF 2.0以来、別のjarファイルにテンプレートをバンドルするのは簡単で、すぐに使えることがわかりました。

唯一の問題は:私はそれを働かせることはできません。 WebアプリケーションWEB-INF/libに含まれているjarファイルにすべてのフレーバ(META-INFディレクトリ、resourcesディレクトリ、root; faces-config.xmlの有無にかかわらず)に "page.xhtml"をデプロイして何かをリクエストするだけですhttp://host/demo/faces/page.xhtmlのようにするか、テンプレートに「インクルード」または「デコレート」を行います。私は例外を得る。

ここでJava EE6> Packaging JSF facelets (xhtml) and ManagedBeans as JAR私のお気に入りのJSFの教師は、これを行うためにカスタムのResourceResolverを使用する方法について説明しています。私はリソースの解決をデバッグしたので、これはうまくいくと思いますし、試してみます。

これはメカニックに関する質問です.2つのアプローチの違いは何ですか?

どのリソースがMETA-INF/resourcesで自動的に検索されますか?

答えて

19

Faceletsの組成(そう、単なる*.xhtmlページ、テンプレートやファイルを含める)はServletContext#getResource()ExternalContext#getResource()た代表者によって解決されます。これはサーブレット3.x互換のコンテナを必要とします。/WEB-INF/lib/*.jar!/META-INF/resourcesからの解決はサーブレット3.0以来のものです。サーブレット3.xにまだいない場合、または何らかの理由でそれらのJARを別の場所に配置する場合は、カスタムResourceResolverを作成する必要があります。 How to create a modular JSF 2.0 application?にも(したがって、<cc:xxx>成分と<h:outputStylesheet><h:outputScript><h:graphicImage>によってロードされるCSS/JS /画像リソースが)ClassLoader#getResource()によってクラスパスから解決され

Faceletsの複合成分と静的リソースを参照。 JSFのクラスパススキャンでJARファイルをインクルードするには、JARファイルの/META-INFフォルダにJSF 2.x互換のfaces-config.xmlファイルを含める必要があります。同じ話は、@ManagedBean,@FacesValidator,@FacesConverter,@FacesComponentおよびその他のJSFアーティファクトに適用されます。

Eclipseで開発する場合、あなたは、このようなモジュールプロジェクトを作成するために ウェブ>ウェブフラグメントプロジェクトを選択することができます

。通常のJavaプロジェクトとあまり変わりありませんが、暗黙的にJavaScriptファセットとターゲットランタイムが含まれており、/META-INF/web-fragment.xmlファイルを自動作成し、既存の動的Webプロジェクトに関連付けられていることを想定していますプロジェクト。

また、既存の標準Javaプロジェクトを使用して、正しいフォルダ構造を作成することもできます。 /META-INFフォルダは、Javaソースフォルダに置かなければなりません。 web-fragment.xmlファイルはオプションです。メインWebプロジェクトプロパティのデプロイメントアセンブリセクションにJavaプロジェクトを手動で追加するだけです。 ではないプロジェクトのビルドパスセクションに別のプロジェクトとして追加してください。

(手動で)JARファイルをビルドするときは、ディレクトリエントリがJARに追加されていることを確認する必要があります。そうしないと、Faceletsコンポジションを解決できません。 Eclipse/Ant/Maven /などのビルドツールでビルドしている場合は、これも考慮する必要があります。これが制御可能でない場合、カスタムResourceResolverが最も信頼できる方法です。

+2

もう一度多くのおかげです。あなたはどこからでもこの細部の情報を常に持っています。あなた自身の仕様を実装していますか:-) ResourceResolverはシンプルで起動しています - 今私はMavenモンスターにWebフラグメントをフィードしようとします... – mtraut

+0

私のために働いていません:私は既存の私は今、実装プロジェクトのビルドパスから削除され、現在はデプロイメントアセンブリとしてのみ追加されている標準の共有Javaプロジェクトです。しかし、私のManagedPropertyは注釈やfaces-configのどちらでも無視されます。 – djmj

+0

@djmj:JARにはJSF 2.0コンパイラの '/ META-INF/faces-config.xml'がなければならず、メインwebappの' faces-config.xml'には 'metadata-complete =" true "'がありません。 – BalusC

関連する問題