它发生前我ui:decorate在功能一样ui:include,只是你也可以通过ui:param与ui:define被包含文件.
我疯了吗?
编辑:虽然事实上你也可以传递ui:param给一个ui:include文件,但事实证明我已经在做了.也许你也可以通过ui:define,我会在这里检查和编辑.
Bal*_*usC 48
<ui:include>和之间的主要区别在于,<ui:decorate>它<ui:decorate>旨在允许插入用户定义的模板组件,而<ui:include>旨在包括现有的和已经预定义的模板.
这确实意味着在其主体中<ui:decorate>支持<ui:define>用户定义的模板组件,并且可以将其插入<ui:insert>模板内的位置.
这是一个有点笨拙的例子来说明它可以在哪里使用:
/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>
Run Code Online (Sandbox Code Playgroud)
/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>
Run Code Online (Sandbox Code Playgroud)
请注意,它在面板网格的每个单元格中很好地呈现组件.同样,这个特殊的例子非常笨拙,我只是使用了一个标记文件.只有当它是一个更大的部分,例如整个形式,例如其页眉或页脚应该是可定制的,那么<ui:decorate>本来是合适的.
另一个主要优点<ui:decorate>是它允许您将复合组件与模板一起使用.另请参见JSF 2中是否可以使用带有复合组件的模板?
| 归档时间: |
|
| 查看次数: |
26758 次 |
| 最近记录: |