Pregunta

Estoy tratando de anular procesador de h:selectBooleanCheckbox (por las razones explicadas aquí ):

Sin embargo, me resulta imposible colocar mi procesador. He tratado de declarar que en mi 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>

Los valores I agarró de:

  • componente familiar: javax.faces.component.html.HtmlSelectBooleanCheckbox
  • de tipo renderer: javax.faces.component.html.SelectBooleanCheckboxTag

Pero no funciona.

También trató extensamente del declarando la RenderKit:

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

Sin embargo, como se puede ver, yo realmente no sé por dónde agarrar valor para render-kit-id o si el render-kit-class es de todos modos correcta.

En el interior del paquete Mojarra hay un fichero jsf-ri-runtime.xml pero no declara los procesadores. Sólo se declara un RenderKitFactory, en virtud del cual no encuentro directamente nada de interés.

Los punteros?

¿Fue útil?

Solución

Su declaración inicial <renderer> se ve bien, así que lo probamos aquí.

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

}

Se trabaja muy bien. Todo se imprimen por la salida estándar. Su problema radica en otro lugar. Yo estaba usando Mojarra 2.0.3 en Tomcat 7.0.5.

Otros consejos

agrego extracción de grasas a mi faces-config.xml este 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 -->

no es necesario (y no debe) declarar una nueva clase kit de rendir en este escenario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top