编码渲染器的方法

时间:2013-12-10 20:22:19

标签: jsf jsf-2

我有UIInput的自定义渲染器的编码方法。

public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
    String ClientId = component.getClientId(context);
    String hint = (String) component.getAttributes().get("placeholder");
    String styleClass = (String) component.getAttributes().get("styleClass");
    String value = (String) component.getAttributes().get("value");
    ResponseWriter writer = context.getResponseWriter();
    writer.writeAttribute("name", ClientId, null);
    writer.writeAttribute("placeholder", hint, "hint");
    writer.startElement("input", component);
    writer.writeAttribute("class", styleClass, "styleClass");
    writer.writeAttribute("value", ((UIInput) component).getValue(), "value");
    writer.endElement("input");
}

在我写了2个属性后,我写了startElement,但它有效。即startElement方法如何工作?我们可以startElement之前的任何地方endElement以及之前endElement element之后的任何地方{/ 1}}。

1 个答案:

答案 0 :(得分:1)

这令人惊讶。 writer.writeAttribute("name", ClientId, null);应该抛出IllegalStateException。至于startElementendElement,来自javadoc

  

startElement...调用此方法后,客户端可以调用writeAttribute()writeURIAttribute()方法来添加属性和相应的值。在对startElement()writeComment()writeText()endElement(),{{的任何后续调用中,将关闭起始元素(即添加尾随'>'字符) 1}},endDocument()close()flush()