Java Primefaces datatable不适用于筛选器+排序

Java Primefaces datatable不适用于筛选器+排序,java,primefaces,datatable,Java,Primefaces,Datatable,我使用PrimeFacesDataTable来显示大约1000行和7列。它工作得很快,但当我过滤一个列并尝试按不同的列对数据集进行排序时,我会出现奇怪的行为。 这里有一个例子:在第一张图片中,数据表在加载时看起来很棒。因为我在处理敏感数据,所以它被严格审查。在第二张图片中,我过滤了2列,在此之前datatable工作正常,但是如果我在这之后对第三列进行排序,我将停止工作,不会显示正确的行。此处显示的值não determinado和许多白色字段在我的数据中不存在 和 这是我的密码: <

我使用PrimeFacesDataTable来显示大约1000行和7列。它工作得很快,但当我过滤一个列并尝试按不同的列对数据集进行排序时,我会出现奇怪的行为。 这里有一个例子:在第一张图片中,数据表在加载时看起来很棒。因为我在处理敏感数据,所以它被严格审查。在第二张图片中,我过滤了2列,在此之前datatable工作正常,但是如果我在这之后对第三列进行排序,我将停止工作,不会显示正确的行。此处显示的值não determinado和许多白色字段在我的数据中不存在

这是我的密码:

<p:dataTable var="prot" value="#{myBean.listaProtocolos}" rows="15" 
 sortBy="#{prot.dataEntradaArea}" sortFunction="#{myBean.sortXMLDatas}" 
 sortOrder="descending" paginator="true" style="font-size: 0.9em;" 
 paginatorPosition="bottom">
  <p:column filterBy="${prot.nrProtocolo}" filterMatchMode="contains" 
   width="8%" style="text-align:center">
    <f:facet name="header">ID</f:facet>
    <p:commandLink action="#{myBean.verDetalhesProtocolo}">
      <h:outputText value="#{prot.nrProtocolo}" 
       style="text-decoration: underline;"/>
      <f:setPropertyActionListener target="#{myBean.nrProtocolo}"
       value="#{prot.nrProtocolo}" />
    </p:commandLink>
  </p:column>
  <p:column filterBy="${prot.nrProcesso}" filterMatchMode="contains"
   width="10%">
    <f:facet name="header">Número</f:facet>
    <h:outputText value="#{prot.nrProcesso}" />
  </p:column>
  <p:column filterBy="${prot.tipoDeProtocoloDescricao}" 
   filterOptions="#{myBean.filtrosTipoDeProtocoloDescricao}" 
   width="10%">
    <f:facet name="header">Processo / Protocolo</f:facet>
    <h:outputText value="#{prot.tipoDeProtocoloDescricao}" />
  </p:column>
  <p:column filterBy="${prot.assunto}" sortBy="#{prot.assunto}"
   filterMatchMode="contains" width="30%">
    <f:facet name="header">Assunto</f:facet>
    <h:outputText value="#{prot.assunto}" />
  </p:column>
  <p:column filterBy="${prot.areaAtual}" sortBy="#{prot.areaAtual}"
   filterMatchMode="contains" width="15%">
    <f:facet name="header">Área Atual</f:facet>
    <h:outputText value="#{prot.areaAtual}" />
  </p:column>
  <p:column filterBy="${prot.tipo}" sortBy="#{prot.tipo}"
   filterMatchMode="contains" width="17%">
    <f:facet name="header">Tipo</f:facet>
    <h:outputText value="#{prot.tipo}" />
  </p:column>
  <p:column filterBy="${prot.dataEntradaAreaFormatada}" 
   sortBy="#{prot.dataEntradaArea}" sortFunction="#{myBean.sortXMLDatas}"
   filterMatchMode="contains" width="10%" style="text-align:center">
    <f:facet name="header">Data de Entrada</f:facet>
    <h:outputText value="#{prot.dataEntradaAreaFormatada}" />
  </p:column>
</p:dataTable>
我正在使用PrimeFacesV6.0。myBean是@SessionScope


为什么会发生这种行为?

我去年也有类似的问题。我设法解决了一个我不太满意的问题,使用filterFunction={mbean.filter}并创建了我自己的filter函数。

去年我遇到了类似的问题。我设法解决了一个问题,我不太喜欢使用filterFunction={mbean.filter}并创建我自己的filter函数。

我注意到您的p:datatable标记中缺少一个重要的值,即filteredValue=,它是另一个类似于value=的列表,用于保存过滤后的值

filteredValue="#{myBean.filteredListaProtocolos}"

我注意到p:datatable标记中缺少一个重要的值,即filteredValue=它是另一个类似于value=的列表,该列表保存过滤后的值

filteredValue="#{myBean.filteredListaProtocolos}"

谢谢我将为每种类型添加一个filterFunction并尝试!当@melloware应答时,我正在编写代码。他的想法很管用,所以我放弃了创建过滤器。谢谢你的帮助!谢谢我将为每种类型添加一个filterFunction并尝试!当@melloware应答时,我正在编写代码。他的想法很管用,所以我放弃了创建过滤器。谢谢你的帮助!非常感谢,这很有效。我还想说,我们应该在不实例化列表的情况下添加getter和setter,例如filteredlistprotocolo我进行了实例化,但它开始表现得很尴尬:非常感谢,这很有效。我还想说,我们应该在不实例化列表的情况下添加getter和setter,例如FilteredListProtocolo我进行了实例化,但它开始表现得很尴尬: