如何在 Facelets 文件中的两个 ui:compositions 之间切换?

How can I switch between two ui:compositions in a Facelets file?

在 JSF xhtml 文件中,我希望能够根据一些标志在两个不同的 ui:compositions 之间进行选择。下面使用虚构的 magic:if 标签对此进行了说明。我怎样才能做到这一点?换句话说,我可以用什么真正的标签来代替 magic:if?

<magic:if test="showOption1">
  <ui:composition template="/option1.xhtml">
    <ui:define name="header">Foo</ui:define>
  </ui:composition>
</magic:if>

<magic:if test="!showOption1">
  <ui:composition template="/option2.xhtml">
    <ui:define name="header">Foo</ui:define>
  </ui:composition>
</magic:if>

In other words, what real tag can I use in place of magic:if?

有none。 <ui:composition> 是根元素。没有什么可以最终更高。

您有 2 个选择:

  1. template 属性本身中进行切换。

    <ui:composition template="/option#{showOption1 ? 1 : 2}.xhtml">
        <ui:define name="header">Foo</ui:define>
    </ui:composition>
    
  2. <ui:composition>里面使用<ui:decorate>,这个可以用<c:if>.

    包裹起来
    <ui:composition template="/options.xhtml">
        <c:if test="#{showOption1}">
            <ui:decorate template="/option1.xhtml">
                <ui:define name="header">Foo</ui:define>
            </ui:decorate>
        </c:if>
        <c:if test="#{not showOption1}">
            <ui:decorate template="/option2.xhtml">
                <ui:define name="header">Foo</ui:define>
            </ui:decorate>
        </c:if>
    </ui:composition>