primefaces选项卡使用动态选项卡查看不同的选项卡内容

primefaces选项卡使用动态选项卡查看不同的选项卡内容,primefaces,jsf-2.2,Primefaces,Jsf 2.2,我对tabView有问题。第一个选项卡应始终显示相同的内容(称为搜索模板,用#{not curSearch.isClosable()}标识。所有其他选项卡都是搜索实例(用#{curSearch.isClosable()标识) 代码如下: <p:tabView id="searchTabViewId" var="curSearch" value="#{searchBL.searchInstances}" activeIndex="#{searchBL.activeTabIndex}" s

我对tabView有问题。第一个选项卡应始终显示相同的内容(称为搜索模板,用#{not curSearch.isClosable()}标识。所有其他选项卡都是搜索实例(用#{curSearch.isClosable()标识)

代码如下:

<p:tabView id="searchTabViewId" var="curSearch" value="#{searchBL.searchInstances}"
  activeIndex="#{searchBL.activeTabIndex}" styleClass="searchTabView">




不幸的是,在第一个选项卡上调用了curSearch对象的方法,这些方法仅用于第二个选项卡和后面的选项卡。如果我不使用ui:insert,则它不会更改任何内容。 有人知道我的错在哪里吗

问候 奥利弗这项工作:

<p:tabView id="searchTabViewId" styleClass="searchTabView" activeIndex="#{searchBL.activeTabIndex}">

  <!-- do the iteration over the search instances NOT in the tabView because this will not work with ui:include -->
  <c:forEach items="#{searchBL.searchInstances}" var="curSearch">

     <p:tab closable="#{curSearch.isCloseable()}">

        <f:facet name="title">
           <p:graphicImage library="images" name="search_tab.png" height="16" styleClass="tabImage"
              rendered="#{not curSearch.isCloseable()}" />
           <h:outputText value="#{curSearch.title}" />
        </f:facet>

        <!-- do not use 2 ui:includes here, the dynamic must be in the src attribute to get it work -->
        <ui:include
           src="#{curSearch.closeable ? '/sections/search/searchInstanceTab.xhtml' : '/sections/search/firstSearchTab.xhtml'}">
           <ui:param name="curSearch" value="#{curSearch}" />
        </ui:include>

     </p:tab>

  </c:forEach>


我也遇到了同样的问题,我找到的唯一解决方案是将包含在其他组件中,并使用呈现钳制显示哪个组件。对于初始加载,如果您有id(取决于内容),则需要设置id前缀,以便它不允许出现空id字段:

<p:tabView id="tabsView" dynamic="true" cache="true"
           value="#{TabViewController.tabView.openedTabs}" var="tabDefinition" activeIndex="#{TabViewController.tabView.activeIndex}">
    <p:ajax event="tabClose" listener="#{TabViewController.onCloseTab}" update="tabsView"/>
    <p:ajax event="tabChange" update="tabsView"/>
    <p:tab id="tab#{tabDefinition.id}" title="#{tabDefinition.title}" closable="true" action="">
        <f:facet name="title">
            <h:outputText value="#{tabDefinition.title}"/>
        </f:facet>
        <p:outputPanel style="display:block" rendered="#{'dataTable'.equals(tabDefinition.type)}">
            <ui:include src="dataTable.xhtml">
                <ui:param name="dataTableName" value="#{tabDefinition.contentName}"/>
            </ui:include>
        </p:outputPanel>
        <p:outputPanel style="display:block" rendered="#{'form'.equals(tabDefinition.type)}">
            <ui:include src="form.xhtml">
                <ui:param name="formId" value="#{tabDefinition.id}"/>
                <ui:param name="formName" value="#{tabDefinition.contentName}"/>
            </ui:include>
        </p:outputPanel>
    </p:tab>
</p:tabView>


没有解决方案。dataTable的Ajax调用只在最后一个选项卡上工作。因为我目前不使用primefaces,所以无法检查此项
</p:tabView>
<p:tabView id="searchTabViewId" styleClass="searchTabView" activeIndex="#{searchBL.activeTabIndex}">

  <!-- do the iteration over the search instances NOT in the tabView because this will not work with ui:include -->
  <c:forEach items="#{searchBL.searchInstances}" var="curSearch">

     <p:tab closable="#{curSearch.isCloseable()}">

        <f:facet name="title">
           <p:graphicImage library="images" name="search_tab.png" height="16" styleClass="tabImage"
              rendered="#{not curSearch.isCloseable()}" />
           <h:outputText value="#{curSearch.title}" />
        </f:facet>

        <!-- do not use 2 ui:includes here, the dynamic must be in the src attribute to get it work -->
        <ui:include
           src="#{curSearch.closeable ? '/sections/search/searchInstanceTab.xhtml' : '/sections/search/firstSearchTab.xhtml'}">
           <ui:param name="curSearch" value="#{curSearch}" />
        </ui:include>

     </p:tab>

  </c:forEach>
<p:tabView id="tabsView" dynamic="true" cache="true"
           value="#{TabViewController.tabView.openedTabs}" var="tabDefinition" activeIndex="#{TabViewController.tabView.activeIndex}">
    <p:ajax event="tabClose" listener="#{TabViewController.onCloseTab}" update="tabsView"/>
    <p:ajax event="tabChange" update="tabsView"/>
    <p:tab id="tab#{tabDefinition.id}" title="#{tabDefinition.title}" closable="true" action="">
        <f:facet name="title">
            <h:outputText value="#{tabDefinition.title}"/>
        </f:facet>
        <p:outputPanel style="display:block" rendered="#{'dataTable'.equals(tabDefinition.type)}">
            <ui:include src="dataTable.xhtml">
                <ui:param name="dataTableName" value="#{tabDefinition.contentName}"/>
            </ui:include>
        </p:outputPanel>
        <p:outputPanel style="display:block" rendered="#{'form'.equals(tabDefinition.type)}">
            <ui:include src="form.xhtml">
                <ui:param name="formId" value="#{tabDefinition.id}"/>
                <ui:param name="formName" value="#{tabDefinition.contentName}"/>
            </ui:include>
        </p:outputPanel>
    </p:tab>
</p:tabView>