扩展 JSF 多级模板中特定部分的最佳方法

Best way to extend a particular section in JSF multilevel template

我有一个多级 JSF 模板,比如 layout.xhtml,它从下面描述的模板数量扩展而来。

layout.xhtml -> level3.xhtml -> level2.xhtml ->level1.xhtml

如何扩展 level1.xhtml 添加一个额外的 facelets(我总共想要 2 个 facelets)说 customer-data.xhtmlsupplier-data.xhtml ) 继承自 level1.xhtml 代替 navigation-module, 并具有所有layout.xhtml 的小脸也是?

下面是我的template/level1.xhtml

<ui:composition
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets">

            <ui:insert name="navigation-module" />
            <ui:insert name="time-module" />

</ui:composition>

我想获取通用模板,即 layout.xhtml 我不知道如何操作。

我相信您想为导航模块添加两个页面。非常简单,只需执行以下操作

<ui:composition
        template=template/layout.xhtml
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets">

<ui:define name="navigation-module">
            <ui:insert name="WEB-INF/customer-data.xhtml" />
            <ui:insert name="WEB-INF/supplier-data.xhtml" />
</ui:define>

只要您提供正确的 ui:insert 名称,即在您的情况下它是 navigation-module,并且在您告诉 JSF 的 ui:define 中,请将这些页面插入到位导航模块。这里要注意的两个要点是

  1. 确保提及模板名称,即您可以在 ui:composition 标记后立即看到,即 template/layout.xhtml(原因是您需要所有模板功能)
  2. ui:define 中使用您想要覆盖的确切名称,即在您的情况下它是 navigation-module

希望我对你很清楚。如果您需要任何进一步的说明,请随时发表评论。