JSF 2.0: Wie Basis Renderer mit benutzerdefinierten diejenigen außer Kraft zu setzen?

StackOverflow https://stackoverflow.com/questions/4605401

  •  25-09-2019
  •  | 
  •  

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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top