JSF 2.0: Wie Basis Renderer mit benutzerdefinierten diejenigen außer Kraft zu setzen?
Frage
Ich versuche Renderer für h:selectBooleanCheckbox
außer Kraft zu setzen (aus den Gründen, erklärt hier ):
Allerdings finde ich es unmöglich, meine Renderer zu registrieren. Ich habe versucht, es in meinem faces-config.xml
erklärt:
<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>
Die Werte Ich packte aus:
- Komponente-family:
javax.faces.component.html.HtmlSelectBooleanCheckbox
- Renderer-Typ:
javax.faces.component.html.SelectBooleanCheckboxTag
Aber es funktioniert nicht.
Ich habe auch versucht, verbosely die RenderKit
erklärt:
<description>Custom renderers</description>
<render-kit-id>???</render-kit-id>
<render-kit-class>com.sun.faces.renderkit.RenderKitImpl</render-kit-class>
Aber wie Sie sehen können, ich weiß wirklich nicht, wo zu greifen Wert für render-kit-id
oder wenn die render-kit-class
korrekt sowieso.
Innerhalb Mojarra Paket gibt es jsf-ri-runtime.xml
Datei aber nicht die Renderer erklären. Es erklärt nur ein RenderKitFactory
, unter denen ich direkt nichts von Interesse finden.
Pointers?
Lösung
Ihre erste <renderer>
Erklärung sieht gut aus, so dass ich es versuchte hier.
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);
}
}
Es funktioniert gut. Alle gehen auf die Standardausgabe gedruckt. Ihr Problem liegt woanders. Ich war mit Mojarra 2.0.3 auf Tomcat 7.0.5.
Andere Tipps
Ich füge Renderer meinen faces-config.xml
etwa so:
<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 -->
Sie brauchen nicht (und sollen nicht) deklarieren eine neue Kit-Klasse in diesem Szenario machen.