También debe consultar Facelets; hay un good introductory article en DeveloperWorks.
La etiqueta Facelets <ui:insert/>
es comparable a la etiqueta ASP.NET <asp:ContentPlaceHolder/>
utilizada en las páginas maestras; le permite proporcionar contenido predeterminado para esa área de la página, pero esto puede ser anulado.
Para rellenar la plantilla Facelets en otra página, comienza con un elemento <ui:composition/>
que apunta al archivo de plantilla. Esto es más o menos equivalente a declarar el atributo MasterPageFile en una página ASP.NET.
Dentro del elemento <ui:composition/>
, utiliza elementos <ui:define/>
para anular los valores predeterminados de la plantilla, de forma similar a como se usa una etiqueta <asp:Content/>
. Estos elementos pueden contener cualquier tipo de contenido, desde cadenas simples hasta elementos JSF.
lo tanto, para ponerlo todo junto ...
En master.xhtml:
<!-- HTML header content here -->
<ui:insert name="AreaOne">Default content for AreaOne</ui:insert>
<ui:insert name="AreaTwo">Default content for AreaTwo</ui:insert>
<!-- HTML footer content here -->
En página.XHTML:
<ui:composition template="/WEB-INF/templates/master.xhtml">
<ui:define name="AreaOne">Here is some new content</ui:define>
<ui:define name="AreaTwo">
<p>Some new content here too</p>
</ui:define>
</ui:composition>
Y esto convertirá como:
<!-- HTML header content here -->
Here is some new content
<p>Some new content here too</p>
<!-- HTML footer content here -->
También puede obtener algunos otros beneficios con Facelets, tales como la capacidad de reutilizar componentes de la página con datos diferentes.
(Editado para proporcionar más información.)