JSF 2.0: как переопределить базовые рендеры с помощью пользовательских? - PullRequest
7 голосов
/ 05 января 2011

Я пытаюсь переопределить средство визуализации для 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, под которым я не нахожу ничего интересного.

Указатели

Ответы [ 2 ]

11 голосов
/ 05 января 2011

Ваше первоначальное объявление <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);
    }

}

Работает нормально.Все печатаются на стандартный вывод.Ваша проблема лежит где-то еще.Я использовал Mojarra 2.0.3 на Tomcat 7.0.5.

2 голосов
/ 05 января 2011

Я добавляю рендереры к моим 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 -->

Вам не нужно (и не следует) объявлять новый класс набора визуализации в этом сценарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...