Domanda

Sto cercando di ignorare renderer per h:selectBooleanCheckbox (per le ragioni spiegate qui ):

Tuttavia, trovo impossibile registrare il mio renderer. Ho cercato dichiarandolo nel mio 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>

I valori che ho afferrato da:

  • componente-family: javax.faces.component.html.HtmlSelectBooleanCheckbox
  • renderer-tipo: javax.faces.component.html.SelectBooleanCheckboxTag

Ma non funziona.

Ho provato anche verbosely dichiarando la RenderKit:

<description>Custom renderers</description>
<render-kit-id>???</render-kit-id>
<render-kit-class>com.sun.faces.renderkit.RenderKitImpl</render-kit-class>

Ma, come si può vedere, io non so davvero dove il valore afferrare per render-kit-id o se il render-kit-class è corretto in ogni caso.

pacchetto All'interno Mojarra c'è un file jsf-ri-runtime.xml ma non dichiara i renderer. Dichiara solo RenderKitFactory, sotto il quale non trovo direttamente qualche cosa di interesse.

Puntatori?

È stato utile?

Soluzione

La vostra dichiarazione <renderer> iniziale guarda bene, così ho provato qui.

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);
    }

}

Funziona bene. Tutti vengono stampati sullo standard output. Il vostro problema si trova da qualche altra parte. Stavo usando Mojarra 2.0.3 su Tomcat 7.0.5.

Altri suggerimenti

aggiungo al mio renderer faces-config.xml in questo modo:

<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 -->

Non c'è bisogno di (e non deve) dichiarare una nuova classe di rendering kit in questo scenario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top