JSF 2.0:基本レンダラーをカスタムレンダラーでオーバーライドするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4605401

  •  25-09-2019
  •  | 
  •  

質問

レンダラーをオーバーライドしようとしています h:selectBooleanCheckbox (説明した理由により、 ここ):

しかし、レンダラーを登録することができないことがわかりました。私の中で宣言してみました faces-config.xml:

<render-kit>
    <renderer>
        <component-family>javax.faces.SelectBoolean</component-family>
        <renderer-type>javax.faces.Checkbox</renderer-type>
        <renderer-class>com.myapp.CustomCheckboxRenderer</renderer-class>
    </renderer>
</render-kit>

私が取得した値:

  • コンポーネントファミリー: javax.faces.component.html.HtmlSelectBooleanCheckbox
  • レンダラタイプ: javax.faces.component.html.SelectBooleanCheckboxTag

しかし、うまくいきません。

また、冗長に宣言してみました RenderKit:

<description>Custom renderers</description>
<render-kit-id>???</render-kit-id>
<render-kit-class>com.sun.faces.renderkit.RenderKitImpl</render-kit-class>

しかし、ご覧のとおり、どこで価値を掴めばいいのかわかりません render-kit-id または、 render-kit-class とにかく正しいです。

Mojarra パッケージ内にはファイルがあります jsf-ri-runtime.xml ただし、レンダラーは宣言されていません。宣言するだけです RenderKitFactory, 、その下には直接興味深いものは見つかりません。

ポインタ?

役に立ちましたか?

解決

あなたの初期<renderer>宣言は罰金に見える、私はここでそれを試してみましたので。

package com.myapp;

import java.io.IOException;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import com.sun.faces.renderkit.html_basic.CheckboxRenderer;

public class CustomCheckboxRenderer extends CheckboxRenderer {

    public CustomCheckboxRenderer() {
        System.out.println("CustomCheckboxRenderer <init>");
    }

    @Override
    public void decode(FacesContext context, UIComponent component) {
        System.out.println("CustomCheckboxRenderer decode()");
        super.decode(context, component);
    }

    @Override
    public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
        System.out.println("CustomCheckboxRenderer encodeBegin()");
        super.encodeBegin(context, component);
    }

    @Override
    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
        System.out.println("CustomCheckboxRenderer encodeEnd()");
        super.encodeEnd(context, component);
    }

}

これは、罰金に動作します。すべてのstdoutに出力されます。あなたの問題は、どこか別の場所にあります。私は、Tomcat 7.0.5上クロサギ科2.0.3を使用していた。

他のヒント

私はそうのように私のfaces-config.xmlにレンダラーを追加します:

<faces-config>
    <!--elided-->
<render-kit>
    <render-kit-id>HTML_BASIC</render-kit-id>
    <renderer>
        <display-name>MyRenderer</display-name>
        <component-family>javax.faces.Output</component-family>
        <renderer-type>foo.MyRenderer</renderer-type>
        <renderer-class>foo.MyRenderer</renderer-class>
        <!-- TODO: attributes for tooling -->

あなたがする必要はありません(といけない)このシナリオでは、新しいレンダリングキットのクラスを宣言します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top