Я хочу добавить атрибуты 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