Вот что я сделал, пытаясь условно визуализировать фасет в составном компоненте.
<composite:interface>
<composite:facet name="header" required="false" />
</composite:interface>
<composite:implementation>
<p:panel>
<c:if test="#{empty component.facets.header}" >
<f:facet id="#{cc.attrs.id}_default_header" name="header">
all sorts of stuff here
</f:facet>
</c:if>
<c:if test="#{not empty component.facets.header}">
<composite:insertFacet id="#{cc.attrs.id}_custom_header" name="header" />
</c:if>
<composite:insertChildren id="#{cc.attrs.id}_content"/>
</p:panel>
</composite:implementation>
Это позволяет пользователю составного компонента предоставить фасет заголовка, если он хочет, а если нет, мы предоставляем значение по умолчанию. Очевидно, что вместо предоставления значения по умолчанию вы просто ничего не могли бы сделать.
Это сочетание c: если в элементах управления jsf, но мы не увидели никаких побочных эффектов.