扩展的@FacesComponent作为复合接口componentType不呈现任何内容

Osw*_*Osw 3 jsf composite-component jsf-2

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

步骤1:

@FacesComponent(value="customPanel")
public class CustomPanel extends HtmlPanelGroup { // or UIPanel
}
Run Code Online (Sandbox Code Playgroud)

第2步:

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

<!-- IMPLEMENTATION -->
<composite:implementation>
  <h:outputText value="Some text:"/>
  <composite:insertChildren/>
</composite:implementation>
Run Code Online (Sandbox Code Playgroud)

第3步:

<xyz:panel>Hello world!</xyz:panel>
Run Code Online (Sandbox Code Playgroud)

没有显示.我在这里错过了什么?

Bal*_*usC 5

复合组件的后备组件必须实现NamingContainer并且getFamily()必须返回javax.faces.NamingContainer.另请参阅标记文档中的componentType属性<composite:interface>说明.

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

也可以看看: