Since
ui:fragment
doesn’t support rendered most of IDE (like Netbeans mark it as error BUT it works because in JSF parameters are inherited)
This is actually a bug in JSF 2.0 Facelets tag file declaration (in Mojarra, that’s the com/sun/faces/metadata/taglib/ui.taglib.xml
file). The rendered
attribute is overlooked and missing in the tag file declaration (and also in the JSF 2.0 <ui:fragment>
tag documentation), while it is really present in the UIComponent
. The IDE validation is based on the tag file declarations and hence it gives a misleading validation error. This issue is fixed in JSF 2.1, the missing attribute is added to the tag file declaration (and also in the JSF 2.1 <ui:fragment>
tag documentation).
If either just ignoring the IDE warnings or upgrading to JSF 2.1 is not an option, then you can consider using the <h:panelGroup>
component instead:
<h:panelGroup rendered="#{condition}">
<h:outputText value="text 1"/>
<h:outputText value="text 2"/>
<h:outputText value="text 3"/>
</h:panelGroup>
It outputs nothing anyway if you don’t specify the id
, style
, styleClass
and like attributes, else a simple <span>
will be rendered.
If all what you have is plain vanilla HTML (i.e. no JSF components), then you can also consider using <f:verbatim>
.
<f:verbatim rendered="#{condition}">
text 1
text 2
text 3
</f:verbatim>
However, the <f:verbatim>
is deprecated in JSF 2.0 (which in turn has also a documentary bug by the way, the JSF 2.0 <f:verbatim>
tag documentation does not mention deprecation, but the JSF 2.1 <f:verbatim>
tag documentation does).