Extended @FacesComponent as composite interface componentType renders nothing
I'm trying to extend JSF's component class (let it be one of h:panelGroup
) and render it via composite component:
Step 1:
@FacesComponent(value="customPanel")
public class CustomPanel extends HtmlPanelGroup { // or UIPanel
}
Step 2:
<!-- INTERFACE -->
<composite:interface componentType="customPanel"/>
<!-- IM开发者_如何学运维PLEMENTATION -->
<composite:implementation>
<h:outputText value="Some text:"/>
<composite:insertChildren/>
</composite:implementation>
And step 3:
<xyz:panel>Hello world!</xyz:panel>
shows nothing. What am I missing here?
The backing component of the composite component must implement NamingContainer
and the getFamily()
must return javax.faces.NamingContainer
. See also description of the componentType
attribute in the <composite:interface>
tag documentation.
@FacesComponent(value="customPanel")
public class CustomPanel extends HtmlPanelGroup implements NamingContainer {
@Override
public String getFamily() {
return UINamingContainer.COMPONENT_FAMILY;
}
}
You can also choose to extend UINamingContainer
instead, so that you can omit the getFamily()
.
See also:
- Composite component wiki page
精彩评论