Primefaces:页面上的多个数据表 - 排序

问题描述 投票:0回答:3
sorting jsf-2 primefaces datatable
3个回答
1
投票

解决方案是在包含其他表的表中添加 rowStatePreserved="true"。这是在 Primefaces 5.1.14 中添加的,是 JSF 2.1 的一部分。

鸣谢:sdjavaudvk (http://forum.primefaces.org/viewtopic.php?f=3&t=43441)。

<p:dataTable id="tab1" var="resumo" value="#{resumoView.resumos}" rows="20" 
                         paginator="true" 
                         rowsPerPageTemplate="5,10,15,20" 
                         rowStatePreserved="true">
...

0
投票

您是否尝试过为每个数据表使用不同的表单?像这样:

<h:form>
  <p:dataTable id="tab1"> ... </p:dataTable>
</h:form>
  
<h:form>
  <p:dataTable id="tab2"> ... </p:dataTable>
</h:form>


0
投票

我们在Primefaces6.0上遇到了同样的问题。

我们有一个包含两个表的表单,并且可以通过值列表(filterMatchMode 精确)或通过输入文本(filterMatchMode 包含)过滤特定列。

第一个表没有工作过滤器(我们遇到了与您相同的 NullPointerException),第二个表工作正常。

这两个表在一个组件中,两个表中过滤和排序的列是使用 JSTL 有条件构建的,如下所示:

    <c:choose>
        <c:when test="#{cc.attrs.filterOperatorExact}">
            <p:column headerText="Header name"
                sortBy="#{vector.operatorForDisplay}"
                filterBy="#{vector.operatorForDisplay}" filterMatchMode="exact"
                filterOptions="#{cc.attrs.filtersOperatorList}">
                <h:outputText value="#{vector.operatorForDisplay}" />
            </p:column>
        </c:when>
        <c:otherwise>
            <p:column headerText="Header name"
                sortBy="#{vector.operatorForDisplay}"
                filterBy="#{vector.operatorForDisplay}" filterMatchMode="contains">
                <h:outputText value="#{vector.operatorForDisplay}" />
            </p:column>
        </c:otherwise>
    </c:choose>

使用“JSF方式”对渲染的属性执行此操作,问题消失了:

    <p:column headerText="Header name"
        sortBy="#{vector.operatorForDisplay}"
        filterBy="#{vector.operatorForDisplay}" filterMatchMode="exact"
        filterOptions="#{cc.attrs.filtersOperatorList}"
        rendered="#{cc.attrs.filterOperatorExact}">
        <h:outputText value="#{vector.operatorForDisplay}"/>
    </p:column>
    <p:column headerText="Header name"
        sortBy="#{vector.operatorForDisplay}"
        filterBy="#{vector.operatorForDisplay}" filterMatchMode="contains"
        rendered="#{not cc.attrs.filterOperatorExact}">
        <h:outputText value="#{vector.operatorForDisplay}"/>
    </p:column>

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.