jsf - plantillas - ui:composition primefaces
¿Cuál es la diferencia conceptual real entre ui: decorate y ui: include? (1)
Se me ocurre que ui:decorate
es funcionalmente el mismo que ui:include
excepto que también puedes pasar ui:param
y ui:define
el archivo incluido.
¿Estoy loco?
EDITAR: aunque de hecho puedes pasar ui:param
a ui:include
archivos, resulta que ya lo estoy haciendo. Tal vez puedas pasar un ui:define
también, voy a verificar y editar aquí.
La principal diferencia entre <ui:include>
y <ui:decorate>
es que el <ui:decorate>
está pensado para permitir la inserción de componentes de plantilla definidos por el usuario, mientras que <ui:include>
está destinado a incluir un existente y ya plantilla predefinida
Esto de hecho significa que <ui:decorate>
admite <ui:define>
para los componentes de plantilla definidos por el usuario en su cuerpo y puede insertarlo en el lugar <ui:insert>
dentro de la plantilla.
Aquí hay un ejemplo algo torpe para mostrar dónde se puede usar:
/WEB-INF/templates/field.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:outputLabel for="#{id}" value="#{label}" />
<ui:insert name="input" />
<h:message id="#{id}_message" for="#{id}" />
</ui:composition>
/page.xhtml
<h:panelGrid columns="3">
<ui:decorate template="/WEB-INF/templates/field.xhtml">
<ui:param name="label" value="Foo" />
<ui:param name="id" value="foo" />
<ui:define name="input">
<h:inputText id="foo" value="#{bean.foo}" required="true" />
</ui:define>
</ui:decorate>
<ui:decorate template="/WEB-INF/templates/field.xhtml">
<ui:param name="label" value="Bar" />
<ui:param name="id" value="bar" />
<ui:define name="input">
<h:selectBooleanCheckbox id="bar" value="#{bean.bar}" required="true" />
</ui:define>
</ui:decorate>
...
</h:panelGrid>
Tenga en cuenta que representa los componentes muy bien en cada celda de la cuadrícula del panel. Nuevamente, este ejemplo en particular es bastante torpe, en vez de eso, habría usado un archivo de etiqueta . Solo si fuera una sección más grande, por ejemplo, una forma completa, por ejemplo, su encabezado o pie de página, debe ser personalizable, entonces un <ui:decorate>
hubiera sido apropiado.
Otra gran ventaja de <ui:decorate>
es que le permite usar un componente compuesto con una plantilla. Ver también ¿Es posible usar una plantilla con componente compuesto en JSF 2?