Украсить рендерер - PullRequest
       1

Украсить рендерер

1 голос
/ 11 октября 2011

Я хочу добавить атрибуты HTML5 для простого ввода текста. Поэтому я хотел бы украсить стандартный рендерер для h: inputText. Мое решение основано на наследовании от com.sun.faces.renderkit.html_basic.TextRenderer, который характерен для Mojarra Есть ли лучший способ украсить существующий рендерер без привязки к конкретной реализации и без необходимости повторной реализации функциональности основного рендерера?

Вот мое решение:

@FacesRenderer(componentFamily=Html5InputRenderer.COMPONENT_FAMILY, rendererType=Html5InputRenderer.COMPONENT_TYPE)
public class Html5InputRenderer extends TextRenderer {

public static final String COMPONENT_FAMILY = "javax.faces.Input";

public static final String COMPONENT_TYPE = "javax.faces.Text";

public static final String RENDERED_TYPE_NAME = "renderedType";

@Override
public void encodeBegin(final FacesContext context, final UIComponent component) throws IOException {

    if (component.getAttributes().containsKey(RENDERED_TYPE_NAME)) {

        ResponseWriter writer = context.getResponseWriter();
        StringWriter buffer = new StringWriter();

        String replacement;

        try {
            ResponseWriter clonedWriter  = writer.cloneWithWriter(buffer);
            context.setResponseWriter(clonedWriter);
            super.encodeBegin(context, component);

            String renderedMarkup = buffer.toString();

            // do some stuff with markup rendered by the basic renderer

            clonedWriter.close();

            if (null != replacement) {
                writer.write(replacement);
            }

        } finally {
            context.setResponseWriter(writer);
        }

    } else {
        super.encodeBegin(context, component);
    }
}

Thx, DS

1 Ответ

0 голосов
/ 11 октября 2011

Вы можете украшать рендеры с помощью , предоставляя свой собственный набор рендеринга . Для этого создайте RenderKitFactory с открытым конструктором, который принимает аргумент типа RenderKitFactory. Определите новый RenderKitFactory в faces-config.xml. Во время инициализации инфраструктура JSF передаст ранее настроенный RenderKitFactory вашему конструктору.

Подробнее см. JSF .

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