在tabView中的Primefaces dataTable查看行选择不正常

时间:2015-03-17 13:50:46

标签: jsf-2 primefaces datatable tabview

我有一个tabView,其中包含动态数量的标签,用于显示搜索结果(在SearchInstance类中)。在选项卡内部还有一个tabView,它以不同的方式显示搜索结果。此内部tabView的一个选项卡显示dataTable(作为List)中的搜索结果。行是可选择的。我将表中选定的搜索结果传播到当前的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作为模型。在第一个选项卡上没有显示dataTable。因此,问题出现在索引&gt;的选项卡上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迭代变量中设置所选行?

我正在使用JSF 2.2.10和Primefaces 5.1.13。与juel el 2.2.7。

此致 奥利弗

0 个答案:

没有答案