templates - 嵌套模板覆盖ui :default with ui:insert

标签 templates jsf facelets

是否存在有关如何使用<ui:define>覆盖模板定义<ui:insert>的规则。

模板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:define>覆盖<ui:insert>

为嵌套的<ui:insert>创建新名称是一种可能,但很难跟踪层次结构以及根本在何处使用插入符。

最佳答案

不幸的是,Facelets不允许您“链接”插入/定义。

在您的第一个示例(站点1 )中,模板A中有一个名为“content”的insert。有两个definitions被考虑;直接模板客户端的模板(模板B)和模板B的模板客户端(站点1)的模板。对于这种情况,Facelets看不到模板B具有另一个insert。它只考虑两个竞争的definitions作为“内容”,并且规则是最高的一个获胜,即站点1。

您确实忘记了将 namespace 放在模板客户端上。您应该看到的输出是:

template A content
site content

即,“模板A内容”位于insert标记之外的最低模板中。它将直接呈现。 “网站内容”位于“内容”的最顶部definition中。

在第二个示例(站点2 )中,最顶层的模板客户端中根本没有definition。模板B中只有一个definition,因此将使用其中一个。您应该看到的输出是:
template A content
template B content

出于与第一个示例相同的原因,您将看到“模板A内容”,因为它是唯一的definition,所以将看到“模板B内容”。之后的嵌套第二个insert将被忽略。

Creating new names for the nested is one possibility but its hard to keep track of the hierarchy and where insert's are used at all.



真的是。正是由于这个原因,我一年多以前为此在https://github.com/eclipse-ee4j/faces-api/issues/1008上创建了一个规范问题

如果此特定功能对您很重要,请投票和/或发表评论。

关于templates - 嵌套模板覆盖ui :default with ui:insert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14036664/

相关文章:

c++ - 如何使用模板类的子类推导C++中模板函数的模板参数?

django - 如何将自定义模板页面添加到夹层?

java - JSF:在 Action 方法中返回 null 仅刷新输入文本,但不刷新组合框

c++ - std::invoke 不喜欢可变参数模板成员函数?

templates - 如何在 html 模板中迭代 Hashmap

java - 如何在多个 war 之间共享一个jsf错误页面

java - JSF 强制渲染值表达式

jsp - JSF 标记如何影响 JSP 生命周期方法? JSP 和facelets 呢?

jsf - JSF id 的规则是什么?

javascript - 使用 javascript 中的函数更新 Primefaces 组件值