我正在尝试覆盖渲染器h:selectBooleanCheckbox
(出于所解释的原因here http://www.i-coding.de/www/en/jsf/bug/selectbooleancheckbox-converter.html):
但是,我发现无法注册我的渲染器。我尝试在我的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);
}
}
效果很好。全部打印到标准输出。你的问题出在别的地方。我在 Tomcat 7.0.5 上使用 Mojarra 2.0.3。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)