組み込みコンポーネント用にカスタマイズされたレンダラーを作成したい:<h:selectOneRadio />
独自のレンダラーを作成して拡張するために、組み込みコンポーネントのレンダラーを決定するにはどうすればよいですか?
それを取得するメカニズムを知りたいので、それを適用して、だけでなく他の組み込みコンポーネントのレンダラーを決定できます<h:selectOneRadio />
。
ありがとう
組み込みコンポーネント用にカスタマイズされたレンダラーを作成したい:<h:selectOneRadio />
独自のレンダラーを作成して拡張するために、組み込みコンポーネントのレンダラーを決定するにはどうすればよいですか?
それを取得するメカニズムを知りたいので、それを適用して、だけでなく他の組み込みコンポーネントのレンダラーを決定できます<h:selectOneRadio />
。
ありがとう
標準のJSFコンポーネントのレンダラークラスは実装固有であり(MojarraとMyFacesにはそれぞれ独自の実装があります)<renderer>
、実装固有faces-config.xml
(またはその成果物)として登録されます。
それを見つけるには、基本的に最初にコンポーネントファミリとレンダラータイプを知っている必要があります。これにより、実装固有のfaces-config.xml
ファイルでレンダラークラスを自分で検索できます。
出発点はパッケージのjavax.faces.component.html
概要です。はコンポーネントクラス<h:selectOneRadio>
で表されます。そのjavadocHtmlSelectOneRadio
の紹介テキストは次のように述べています。
デフォルトでは、rendererTypeプロパティを"
javax.faces.Radio
"に設定する必要があります。
レンダラータイプがあります。
コンポーネントファミリは、まったく同じjavadocのCOMPONENT_FAMILY
「から継承されたフィールドUISelectOne
」セクションで定数として指定されます。「定数フィールド値」をクリックしてください:
public static final java.lang.String
COMPONENT_FAMILY
「javax.faces.SelectOne
」
コンポーネントファミリがあります。
ここで、実装固有のfaces-config.xml
ファイル(またはそのアーティファクト)を調べる必要があります。その場所/名前は残念ながらどこにも文書化されていませんが、Mojarraの場合、それはcom/sun/faces/jsf-ri-runtime.xml
実装JARファイル内のファイルであることがわかります(zipツールを使用してJARファイルを抽出できます)。それを開き、コンポーネントファミリとレンダラータイプに<renderer>
一致するエントリを探します。javax.faces.SelectOne
javax.faces.Radio
<renderer>
<component-family>javax.faces.SelectOne</component-family>
<renderer-type>javax.faces.Radio</renderer-type>
<renderer-class>
com.sun.faces.renderkit.html_basic.RadioRenderer
</renderer-class>
</renderer>
最後にそれがあります:com.sun.faces.renderkit.html_basic.RadioRenderer
。
そのクラスを厳密に拡張すると、カスタムレンダラーが特定のJSF実装に結合されることに注意してください。レンダラーは、MyFacesなどの別の実装では再利用できません。実装に依存しないようにするには、を拡張するレンダラー全体を自分で作成する必要がありますjavax.faces.renderer.Renderer
。