Добавление поддержки настраиваемых атрибутов (HTML5) в компонент UIInput JSF 2.0

Я пытаюсь написать средство визуализации, которое будет обрабатывать атрибут заполнитель в компонент. Я направился по этому пути после прочтения JSF 2.0 удаляет необходимые атрибуты HTML5 , и это кажется правильным. Вот мой пользовательский рендерер

public class InputRenderer extends com.sun.faces.renderkit.html_basic.TextRenderer{

    @Override
    public void encodeBegin(FacesContext context, UIComponent component) 
    throws IOException {
        System.out.println("Rendering :"+component.getClientId());

        String placeholder = (String)component.getAttributes().get("placeholder");
        if(placeholder != null) { 
            ResponseWriter writer = context.getResponseWriter();
            writer.writeAttribute("placeholder", placeholder, "placeholder");
        }

        super.encodeBegin(context, component);

    }


    @Override
    public void decode(FacesContext context, UIComponent component) {
        super.decode(context, component);
    }

    @Override
    public void encodeEnd(FacesContext context, UIComponent component) 
    throws IOException {
        super.encodeEnd(context, component);
    }
}

И этот рендерер зарегистрирован в конфигурации лиц как

 
    
        javax.faces.Input
        javax.faces.Text
        com.example.renderer.InputRenderer
    

. Он регистрируется нормально, никаких проблем.

Я намерен обработать атрибут заполнитель , вставить его и затем делегируйте обработку super. Мой приведенный выше код не работает, потому что я вставляю атрибут не в то место. Он должен быть вставлен после выполнения writer.startElement ('input') . Однако startElement должен происходить где-то в методе super encodeBegin () . Итак, как мне вставить настраиваемый атрибут (в данном случае «заполнитель») и затем продолжить выполнение?

NB: Приведенный выше код добавляет атрибут заполнитель , но не во входной компонент, который я намеревается, он записывает его в родительский элемент Input (поскольку я пытаюсь записать атрибут до того, как сам компонент будет фактически записан в поток, он применяет атрибут к текущему компоненту)

11
задан Community 23 May 2017 в 10:30
поделиться