3

組み込みコンポーネント用にカスタマイズされたレンダラーを作成したい:<h:selectOneRadio /> 独自のレンダラーを作成して拡張するために、組み込みコンポーネントのレンダラーを決定するにはどうすればよいですか?

それを取得するメカニズムを知りたいので、それを適用して、だけでなく他の組み込みコンポーネントのレンダラーを決定できます<h:selectOneRadio />

ありがとう

4

1 に答える 1

7

標準の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_FAMILYjavax.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

参照:

于 2012-10-11T11:31:11.467 に答える