我正在尝试扩展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>
什么都没有。我在这里错过了什么?
答案 0 :(得分:5)
复合组件的后备组件必须实现NamingContainer
,getFamily()
必须返回javax.faces.NamingContainer
。另请参阅<composite:interface>
tag documentation中componentType
属性的说明。
@FacesComponent(value="customPanel")
public class CustomPanel extends HtmlPanelGroup implements NamingContainer {
@Override
public String getFamily() {
return UINamingContainer.COMPONENT_FAMILY;
}
}
您也可以选择扩展UINamingContainer
,以便省略getFamily()
。