Primefaces的dataTable内TabView的行选择无法正常工作(Primefaces

2019-10-22 06:36发布

我有突片的动态数,显示搜索结果(在一类SearchInstance)一个TabView的。 内标签也有这显示以不同的方式在搜索结果的TabView的。 该内TabView的一个选项卡显示在数据表(如列表)的搜索结果。 该行是可选的。 我传播在表中选择的搜索结果在当前SearchInstance对象。 不幸的是,选择的搜索结果只有正确设置的最后一个选项卡上。 如果我最后一个标签之前选择一个选项卡上的搜索结果,Ajax请求不打SearchInstance的正确实例和传播即使选择一些行空List。

有些缩短代码:

外TabView的:

<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作为model.On第一标签是没有显示的数据表。 因此,与指数> 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>

数据表里面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呈现标签? 随着用户界面:重复或内置在TabView的迭代这是行不通的。 或者是它不允许设置直接SearchInstance迭代变量中选定行?

我使用JSF 2.2.10和5.1.13 Primefaces。 与JUEL埃尔2.2.7。

至于奥利弗

文章来源: Primefaces dataTable inside tabView the row selection not working correctly