题
我试图重写呈示器 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类在这种情况。
不隶属于 StackOverflow