我试图重写呈示器 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。你的问题在于其他地方。我是使用Mojarra2.0.3在Tomcat7.0.5.

其他提示

我请加渲染给我的 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 -->

你不需要(并应该不)宣布一个新呈现kit类在这种情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top