【发布时间】:2012-12-26 06:15:31
【问题描述】:
是否有关于如何用<ui:insert> 覆盖模板定义<ui:define> 的规则。
模板 A:
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets">
template A content<br/>
<ui:insert name="content"/>
</ui:composition>
模板 B:
<ui:composition template="/resources/templates/A.xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="content">
template B content<br/>
<ui:insert name="content"/>
</ui:define>
</ui:composition>
站点 1:
<ui:composition template="/resources/templates/B.xhtml">
Site 1<br/>
<ui:define name="content">
site content<br/>
</ui:define>
</ui:composition>
输出:
Site 1
site content
<ui:define> 的内容取自站点 1,模板的内容未呈现。
站点 2:
<ui:composition template="/resources/templates/B.xhtml">
Site 2<br/>
</ui:composition>
输出:
Site 2
template B content
template A content
<ui:define> 的内容取自模板 B 和模板 A,奇怪的是,模板 B 的内容在模板 A 的内容之前呈现。
是否可以用相同名称的新<ui:insert> 覆盖<ui:define>?
为嵌套的 <ui:insert> 创建新名称是一种可能,但很难跟踪层次结构以及插入的位置。
【问题讨论】: