Jsf 2 选项卡视图内的Primefaces dataTable行选择工作不正常

Jsf 2 选项卡视图内的Primefaces dataTable行选择工作不正常,jsf-2,primefaces,datatable,tabview,Jsf 2,Primefaces,Datatable,Tabview,我有一个选项卡视图,具有动态数量的选项卡,在类SearchInstance中显示搜索结果。在选项卡内部还有一个选项卡视图,它以不同的方式显示搜索结果。此内部选项卡视图的一个选项卡将数据表中的搜索结果显示为列表。行是可选择的。我将表中选定的搜索结果传播到当前SearchInstance对象。 遗憾的是,选定的搜索结果仅在最后一个选项卡上设置正确。如果在最后一个选项卡之前的选项卡上选择搜索结果,ajax请求不会命中SearchInstance的正确实例,即使选择了某些行,也会传播空列表 一些简短的代

我有一个选项卡视图,具有动态数量的选项卡,在类SearchInstance中显示搜索结果。在选项卡内部还有一个选项卡视图,它以不同的方式显示搜索结果。此内部选项卡视图的一个选项卡将数据表中的搜索结果显示为列表。行是可选择的。我将表中选定的搜索结果传播到当前SearchInstance对象。 遗憾的是,选定的搜索结果仅在最后一个选项卡上设置正确。如果在最后一个选项卡之前的选项卡上选择搜索结果,ajax请求不会命中SearchInstance的正确实例,即使选择了某些行,也会传播空列表

一些简短的代码:

外部选项卡视图:

<p:tabView id="searchTabViewId" activeIndex="#{searchBL.activeTabIndex}">
<p:ajax event="tabClose" listener="#{searchBL.onCloseTab}" />
<c:forEach items="#{searchBL.searchInstances}" var="curSearch">
    <p:tab closable="#{curSearch.isCloseable()}">
        <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>
索引0上的选项卡作为搜索模板具有特殊含义,不可关闭。因此,第一个选项卡始终相同,但也有一个SearchInstance作为模型。在第一个选项卡上没有显示dataTable。因此,问题出现在索引>0的选项卡上

searchInstanceTab.xhtml:

<h:form rendered="#{curSearch.isCloseable()}">
<h:panelGrid id="searchMaskInstanceOuterGridId" columns="1">
    <p:tabView id="listResultTabViewId">
        <p:tab id="listResultTabId">
            <ui:include src="/sections/search/resultList.xhtml">
                <ui:param name="curSearch" value="#{curSearch}" />
            </ui:include>
        </p:tab>
        ...
    </p:tabView>
</h:panelGrid>
dataTable位于resultList.xhtml中

<p:dataTable id="searchResultTableId" scrollable="true" value="#{curSearch.getSearchResults()}" scrollHeight="300"
var="curSearchResult" sortMode="multiple" rowKey="#{curSearchResult.hashCode()}" draggableColumns="true"
resizableColumns="true" selection="#{curSearch.selectedSearchResults}" >

<p:ajax event="rowSelect" />
<p:ajax event="rowUnselect" />
<p:ajax event="toggleSelect" />
<p:ajax event="rowSelectCheckbox" />
<p:ajax event="rowUnselectCheckbox" />


<p:column style="width: 16px;">
    <p:rowToggler />
</p:column>
<p:column selectionMode="multiple" style="width: 16px; text-align:center" />

<p:columns value="#{curSearch.determinePrimaryPropertyNames()}" var="curPrimaryPropName"
    sortBy="#{curSearchResult[curPrimaryPropName].getValue()}"
    filterBy="#{curSearchResult[curPrimaryPropName].getValue()}" filterMatchMode="contains">

    <f:facet name="header">
        <h:outputText value="...." />
    </f:facet>
    ...
</p:dataTable>
我被困在这里了。使用c:forEach呈现选项卡可能有问题?对于ui:repeat或tabView的内置迭代,它不起作用。 或者不允许直接在SearchInstance迭代变量内设置所选行

我使用的是JSF2.2.10和Primefaces 5.1.13。朱尔2.2.7

问候
Oliver

尝试将h:form移动到resultList中。xhtmlIt位于表单中。我只是通过将dataTable移出tabView来解决这个问题。我现在只使用tabView作为选择触发器,并更新以前在自己容器中tabView选项卡中的内容。许多选项卡使用相同的形式。尝试为每个包含的选项卡创建表单以进行分隔。