扩展的@FacesComponent作为复合接口componentType什么都不呈现

时间:2011-08-12 09:20:04

标签: jsf jsf-2 composite-component

我正在尝试扩展JSF的组件类(让它成为h:panelGroup之一)并通过复合组件呈现它:

第1步:

@FacesComponent(value="customPanel")
public class CustomPanel extends HtmlPanelGroup { // or UIPanel
}

第2步:

<!-- INTERFACE -->
<composite:interface componentType="customPanel"/>

<!-- IMPLEMENTATION -->
<composite:implementation>
  <h:outputText value="Some text:"/>
  <composite:insertChildren/>
</composite:implementation>

第3步:

<xyz:panel>Hello world!</xyz:panel>

什么都没有。我在这里错过了什么?

1 个答案:

答案 0 :(得分:5)

复合组件的后备组件必须实现NamingContainergetFamily()必须返回javax.faces.NamingContainer。另请参阅<composite:interface> tag documentationcomponentType属性的说明。

@FacesComponent(value="customPanel")
public class CustomPanel extends HtmlPanelGroup implements NamingContainer {

    @Override
    public String getFamily() {
        return UINamingContainer.COMPONENT_FAMILY;
    }

}

您也可以选择扩展UINamingContainer,以便省略getFamily()

另见: