Para aquellos que venimos de trabajar con JSP y JSTL el cambio a JSF requiere olvidar algunas prácticas habituales que con JSF o no funciona o, si lo hacen, no son recomendables.

Uno de los primeros dolores de cabeza viene con los bucles que en JSP y con JSTL siempre hemos implementado utilizado c:forEach. Pues no hay que utilizar esa etiqueta. De hecho no hay razón para utilizar JSTL con JSF y, aunque existen versiones adaptadas, están más pensadas como un mecanismo de migración que como solución final. Esta regla es aún más clara en el caso de JSF 2.

A continuación algunas etiquetas Facelets (recordemos, integrado en JSF2) que nos pueden ser útiles recordar inicialmente:

<ui:repeat></ui:repeat>

Parecido a  <c:foreach>, repite una sección en una vista.

<ui:repeat value="#{places.placesList}" var="place">
 ...
</ui:repeat>

Nota: http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets

<ui:insert>, <ui:define> y <ui:composition> / <ui:decorate></ui:decorate></ui:composition></ui:define></ui:insert>

Estas etiquetas nos permiten crear y utilizar plantillas en JSF. Se empieza definiendo un fichero .xhtml con diferentes <ui:insert> donde irán las partes con contenido. Podemos añadir ya contenido que será el contenido por defecto si no lo cambiamos donde usemos la plantilla. A continuación utilizamos la plantilla indicando con <ui:define> el contenido de las diferentes partes que queremos modificar. Todo este contenido estará dentro de una página y, concretamente, dentro de una etiqueta <ui:composition> o <ui:decorate>. La diferencia entre los dos es el tratamiento del contenido fuera de la propia etiqueta. <ui:composition> ignorará todo el contenido que no esté dentro de la propia etiqueta mientras que <ui:decorate> lo mantendrá.