<f:view>
と<f:subview>
を使用する利点はわかりません。 JSFページを使用せずに作成できることに気付きました。
これらのタグを使用する利点は何ですか?
<f:view>
は、locale
、encoding
、contentType
などの利用可能な属性のいずれかを明示的に指定/上書きする場合にのみ有用です。いくつかのフェーズリスナーをアタッチしたい。例えば。
<f:view locale="#{user.locale}" encoding="UTF-8" contentType="text/html">
指定しない場合、代わりに正しいJSFのデフォルトが使用されます。これは、それぞれUIViewRoot#getLocale()
、UTF-8
およびAccept
リクエストヘッダーの最も近い一致です。 Accept
要求ヘッダーの最も近い一致が常に完全に正しいとは限らないことに注意してください。 Faceletsの場合、URLにapplication/xhtml+xml
拡張が存在するため、Webブラウザがデフォルトで.xhtml
として解釈するように構成されていないため(MSIEなど)、text/html
になることがあります。 text/html
に明示的に設定することにより、この誤ったコンテンツタイプを回避したいのです。
テンプレートのどこに配置してもかまわないことに注意してください。 <ui:define>
の直接の子としてテンプレートクライアントに配置することもできます。ただし、正規の場所は<html>
の直接の子であるため、<h:head>
と<h:body>
の両方をラップします。これは、実際にrequiredであるレガシーJSPで行われる方法でもあります。 Faceletsではオプションであり、メタデータとして扱われます。
<f:subview>
は、別の名前付けコンテナコンテキストを作成します。これは、同じビュールートで複数回固定コンポーネントIDを含むインクルードファイルを再利用する場合に特に便利です。そうしないと、コンポーネントIDの重複エラーが発生します。ただし、JSF 2.0のようなインクルードファイルは、それ自体がすでに名前付けコンテナである複合コンポーネントになりやすいためです。
指定しなくても、ビュー内で同じIDを持つコンポーネントを物理的に複数回再利用しなくても害はありません。