If you’re using JSF 2.x with Facelets 2.x instead of JSP, then both are equally valid. Even more, Facelets implicitly wraps inline content in a component as represented by <h:outputText>
(in other words, it will be escaped!).
Only whenever you’d like to disable escaping using escape="false"
, or would like to assign id
, style
, onclick
, etc programmatically, or would like to use a converter (either explicit via converter
or implicit via forClass
), then you need <h:outputText>
.
I myself don’t use <h:outputText>
whenever it is not necessary. Without it, the source code becomes better readable. You can just inline EL in template text like so #{bean.text}
instead of doing <h:outputText value="#{bean.text}">
. Before JSF 2.0, in JSP and Facelets 1.x, this was not possible and thus the <h:outputText>
is mandatory. If your IDE gives warnings on this, it’s most likely JSF 1.x configured/minded.