在 <af:decorativeBox> 的中心面使用 <ui:include>

Using <ui:include> in center facet of <af:decorativeBox>

我从使用 JSP 的 JSF 1.2 迁移到使用 Facelets 的 JSF 2.1。

我使用 oracle ADF Faces 作为组件库。

我的主页布局不再适用于 Facelets。

这是我的布局:

<af:form id="mainForm">
    <af:decorativeBox theme="medium" styleClass="AFVisualRoot">
    <f:facet name="center">
        <!-- Main page -->
        <af:panelStretchLayout topHeight="35" bottomHeight="20" >                       
        <!-- Top menu -->
        <f:facet name="top">
            <af:panelStretchLayout endWidth="255" startWidth="100%">
            <f:facet name="end">    
            </f:facet> 
            <f:facet name="start">
            </f:facet>
            </af:panelStretchLayout>                            
        </f:facet>
        <!-- Page footer -->
        <f:facet name="bottom">
            <af:region id="footerRegion" showHeader="never"
                   value="#{main.footerModel}" />
        </f:facet>
        <!-- Page body -->
        <f:facet name="center">
            <af:panelSplitter orientation="horizontal"
                      splitterPosition="450">
            <f:facet name="first">
                <af:region id="browserRegion" showHeader="never"
                       value="#{main.browserModel}" />
            </f:facet>
            <f:facet name="second">
                <af:region id="contentRegion" showHeader="never"
                       value="#{main.contentModel}" />
            </f:facet>
            </af:panelSplitter>
        </f:facet>
        </af:panelStretchLayout>
    </f:facet>
    </af:decorativeBox>
</af:form>

正如装饰盒中心面的 documentation 中所述,“该面不支持面中的多个面组件

如果我仍想使用 Facelets,如何进行页面布局并仍然受益于 decorativeBox?


更新: 我的问题来自使用 <ui:include> inside facets :

<!-- Top menu -->
<f:facet name="top">
  <af:panelStretchLayout endWidth="255" startWidth="100%">
    <f:facet name="end">    
    </f:facet> 
    <f:facet name="start">
      <ui:include src="/components/menu.xhtml" />
    </f:facet>
  </af:panelStretchLayout>                          
</f:facet>

这是menu.xhtml的一部分:

<?xml version='1.0' encoding='UTF-8'?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:trh="http://myfaces.apache.org/trinidad/html"
    xmlns:tr="http://myfaces.apache.org/trinidad"
    xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
    xmlns:afh="http://myfaces.apache.org/trinidad/html">

    <af:menuBar id="headerMenuBar">
      <!-- Menu Item -->
    </af:menuBar>
</ui:composition>

在 ADF 组件中使用 Facelet 包含页面的正确方法是什么?

我已经用 facelets 和 jspx 测试了你的布局,我得到了相同的结果:两者都有效。

你的问题在别处。

问题更新后更新:

<ui:include> 标签应避免在 ADF 中使用,请参阅 Programming Best Practices - ADF Faces & JavaScript