JSF 2.0:如何使用自定义渲染器覆盖基础渲染器? [英] JSF 2.0: How to override base renderers with custom ones?

查看:42
本文介绍了JSF 2.0:如何使用自定义渲染器覆盖基础渲染器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试覆盖 h:selectBooleanCheckbox 的渲染器(原因解释了 这里):

I am trying to override renderer for h:selectBooleanCheckbox (for the reasons explained here):

但是,我发现无法注册我的渲染器.我曾尝试在我的 faces-config.xml 中声明它:

However, I find it impossible to register my renderer. I have tried declaring it in my 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 是否正确.

But as you can see, I don't really know where to grab value for render-kit-id or if the render-kit-class is correct anyway.

在 Mojarra 包内有文件 jsf-ri-runtime.xml 但它没有声明渲染器.它只声明了一个 RenderKitFactory,在它下面我没有直接找到任何感兴趣的东西.

Inside Mojarra package there is file jsf-ri-runtime.xml but it doesn't declare the renderers. It only declares a RenderKitFactory, under which I don't directly find anything of interest.

指针?

推荐答案

你最初的 声明看起来不错,所以我在这里试了一下.

Your initial <renderer> declaration looks fine, so I tried it here.

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);
    }

}

它工作正常.全部打印到标准输出.你的问题出在别处.我在 Tomcat 7.0.5 上使用 Mojarra 2.0.3.

It works fine. All get printed to stdout. Your problem lies somewhere else. I was using Mojarra 2.0.3 on Tomcat 7.0.5.

这篇关于JSF 2.0:如何使用自定义渲染器覆盖基础渲染器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆