自定义组件的父级为null

时间:2011-12-07 06:15:52

标签: jsf-2 facelets parent custom-component

我创建了一个扩展XXPanelGroup的自定义面板组件HtmlPanelGroup,只是为了将XXComponentHandler添加到代码中。标签放在复合组件内。在此自定义面板组件中,我有另一个自定义标记,具有自己的YYComponentHandler。在这个处理程序中,我需要父组件的完整路径,即XXPanelGroup

但是,出乎意料的是,父组件是null。当我试图明确地调用setParent()时,我得到以下异常:

Parent was not null, but this component not related
    at javax.faces.component.UIComponentBase.eraseParent(UIComponentBase.java:517)
    at javax.faces.component.UIComponentBase.access$400(UIComponentBase.java:99)
    at javax.faces.component.UIComponentBase$ChildrenList.add(UIComponentBase.java:2629)
    at javax.faces.component.UIComponentBaseChildrenList.add(UIComponentBase.java:2603)
    at com.sun.faces.facelets.tag.jsf.ComponentSupport.addComponent(ComponentSupport.java:559)
    ...

这是如何引起的?如何解决?

1 个答案:

答案 0 :(得分:0)

使用以下命令在组件树中插入组件:

public class SomeHandler extends ComponentHandler {
    ...

    @Override
    public void onComponentCreated(FaceletContext context, UIComponent component, UIComponent parent) {
        parent.getChildren().add(component);
    }
}