JSFでカスタムコンポーネントの開発を学んでいると、コンポーネントファミリ、コンポーネントタイプ、レンダラータイプの関係に戸惑いました。たとえば、以下に示すように、レンダラーとカスタムコンポーネントを登録しました。
faces-config.xml
:
<component>
<component-type>study.faces.Div</component-type>
<component-class>javax.faces.component.UIPanel</component-class>
</component>
<render-kit>
<render-kit-id>HTML_BASIC</render-kit-id>
<renderer>
<component-family>javax.faces.Panel</component-family>
<renderer-type>study.faces.DivRenderer</renderer-type>
<renderer-class>com.study.ui.DivRenderer</renderer-class>
</renderer>
</render-kit>
my.taglib.xml
また、次のようにファイルに新しいタグを登録しました。
<tag>
<tag-name>div</tag-name>
<component>
<component-type>study.faces.Div</component-type>
<renderer-type>study.faces.DivRenderer</renderer-type>
</component>
</tag>
この構成は非常にうまく機能します。<component-family>javax.faces.Panel</component-family>
しかし、レンダラーの登録になぜその行が必要なのか理解できませんでした。ではmy.taglib.xml
、コンポーネントとレンダラーが接続されており、IMHOでは、コンポーネントに適切なレンダラーを選択するだけで十分でした。追加パラメータの用途は何<component-family>
ですか?
私はGoogleの調査を行い、「1つのレンダラーを使用して複数のコンポーネントをレンダリングできます。これらのコンポーネントは1つのファミリに属しています」と答えました。しかし、これらの声明は私の混乱を解消しませんでした。コンポーネントタイプ、コンポーネントファミリ、レンダラー選択戦略の関係を誰かが説明できますか?(うまくいけば、良い例があります。)