我有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}}。
答案 0 :(得分:1)
这令人惊讶。 writer.writeAttribute("name", ClientId, null);
应该抛出IllegalStateException
。至于startElement
和endElement
,来自javadoc:
startElement...
调用此方法后,客户端可以调用writeAttribute()
或writeURIAttribute()
方法来添加属性和相应的值。在对startElement()
,writeComment()
,writeText()
,endElement()
,{{的任何后续调用中,将关闭起始元素(即添加尾随'>'字符) 1}},endDocument()
,close()
或flush()
。