我正在构建一个自定义UIComponent
并在其中添加元素(和其他库存 UIComponents)。该组件呈现正常,但无法从ViewRoot
.
假设我有:
ResponseWriter writer;
@Override
public void encodeBegin(FacesContext context) throws IOException {
writer = context.getResponseWriter();
writer.startElement("div", this);
writer.writeText("testing", null);
writer.writeAttribute("id", getClientId(context) + ":testDiv", null);
}
@Override
public void encodeEnd(FacesContext context) throws IOException {
writer.endElement("div");
}
添加为:
<x:myUiComponent id="myComponent" />
这可以正常显示,但是我无法从 ViewRoot 中找到该组件或其子 div:
context.getViewRoot().findComponent("myComponent"); // returns null
context.getViewRoot().findComponent("myComponent:testDiv"); // returns null
findComponent("myComponent:testDiv"); // called within the custom component, throws java.lang.IllegalArgumentException?
当我尝试将其他 UIComponents 添加为我的自定义组件的子组件时,同样的问题也适用 - 它们成功呈现,但是由于我的自定义组件本身并不存在于组件树中,因此无法从组件树中找到它们。
将组件放入组件树的技巧是什么?
编辑:调整标题以更好地反映问题。