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