2015-09-18今回は、Faceletsについて説明します。Faceletsは、JSFのテンプレート機能を提供します。8.2.0.FinalソースコードはGitHubに置きました。https://github.com/subsonicsystems/subsonic-airlines-faceletsプロジェクトの作成プロジェクト名をsubsonic-airlines-faceletsとしています。subsonic-airlines-facelets.warwarファイルは、次の通りです。設定ファイルweb.xmlは、次の通りです。</welcome-file-list></web-app>/WEB-INF/faces-config.xmlJSF2.2では、faces-config.xmlはオプションとなりました。今回は、faces-config.xmlはありません。リソース/resources/css/default.css/resources/images/header.pngCSSファイルや画像ファイルは、規約により次のディレクトリに配置します。]は、オプションです。今回の例では、library-nameをcssとimagesにしています。library-nameは、任意の名称を付けることができますので、この通りでなくても構いません。</h:body></html>template.xhtmlは、テンプレートファイルです。ファイル名は、template.xhtmlでなくても構いません。テンプレートファイルは、別のxhtmlファイルによって参照されます。htmlタグのxmlns:uiは、Faceletsの宣言です。xmlns:pは、PrimeFacesの宣言です。h:outputStylesheetタグは、CSSファイルの場所を指定しています。name=”default.css”となります。p:graphicImageタグは、imgタグを生成します。name=”header.png”となります。ui:insertタグは、挿入される場所を指定するために使います。テンプレートファイルを呼び出すxhtmlファイルのui:defineタグと対応しています。同じname属性のui:insertタグとui:defineタグが対となります。name=”content”/>が対応しています。</h:body></html>index.xhtmlは、テンプレートファイルを呼び出す側のファイルです。ui:compositionタグは、呼び出すテンプレートファイルを指定します。ui:defineタグは、テンプレートファイルのui:insertタグに挿入する内容を定義します。name=”content”/>を置き換えます。整理すると、次のようになります。index.xhtmlが呼び出されます。index.xhtmlは、ui:compositionタグのtemplate属性に./template.xhtmlを指定しているので、template.xhtmlがテンプレートとして使用されます。name=”content”>と</ui:define>に囲まれている部分に置き換えられます。template.xhtmlが応答内容として出力されます。index.xhtmlを呼び出して出力される内容は、index.xhtmlが元となるのではなく、template.xhtmlにindex.xhtmlのui:defineを合成した内容となります。name=”content”>と</ui:define>に囲まれていない部分については、出力されません。デプロイデプロイに成功すると、次の通り表示されます。