web-dev-qa-db-ja.com

f:viewおよびf:subviewを使用する場合

<f:view><f:subview>を使用する利点はわかりません。 JSFページを使用せずに作成できることに気付きました。

これらのタグを使用する利点は何ですか?

44
Nick

<f:view>

<f:view> は、localeencodingcontentTypeなどの利用可能な属性のいずれかを明示的に指定/上書きする場合にのみ有用です。いくつかのフェーズリスナーをアタッチしたい。例えば。

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

<f:subview> は、別の名前付けコンテナコンテキストを作成します。これは、同じビュールートで複数回固定コンポーネントIDを含むインクルードファイルを再利用する場合に特に便利です。そうしないと、コンポーネントIDの重複エラーが発生します。ただし、JSF 2.0のようなインクルードファイルは、それ自体がすでに名前付けコンテナである複合コンポーネントになりやすいためです。

指定しなくても、ビュー内で同じIDを持つコンポーネントを物理的に複数回再利用しなくても害はありません。

こちらもご覧ください:

73
BalusC