JSF 2.0:如何使用自定义渲染器覆盖基础渲染器? [英] JSF 2.0: How to override base renderers with custom ones?
问题描述
我正在尝试覆盖 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屋!