組み込みコンポーネント用にカスタマイズされたレンダラーを作成したい:<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.StringCOMPONENT_FAMILY「javax.faces.SelectOne」
コンポーネントファミリがあります。
ここで、実装固有のfaces-config.xmlファイル(またはそのアーティファクト)を調べる必要があります。その場所/名前は残念ながらどこにも文書化されていませんが、Mojarraの場合、それはcom/sun/faces/jsf-ri-runtime.xml実装JARファイル内のファイルであることがわかります(zipツールを使用してJARファイルを抽出できます)。それを開き、コンポーネントファミリとレンダラータイプに<renderer>一致するエントリを探します。javax.faces.SelectOnejavax.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。