首页 > 解决方案 > Primefaces filterBy 覆盖其他数据表

问题描述

我有两个类PersonPet,其中一个人可能有多个宠物:

public class Person {
    List<Pet> pets;

    // Getter & Setter
}

在我看来,我有一个数据表,列出了List<Person>在搜索中找到的所有人员 ( ):

<p:datatable value="#{SearchBean.resultList}" rowExpandMode="single" id="resultList" var="result" ...>
   <p:column>
      <p:rowToggler rendered="#{result.pets.size() > 0}" />
   </p:column>

   <!-- Some other columns for the persons -->

   <p:rowExpansion> <!-- See below --> </p:rowExpansion>
</p:datatable>

对于每个人(即行),我添加了一个rowExpansion包含另一个数据表,其中包含属于此人的所有宠物,如图所示,如果有一些宠物属于此人:

<p:rowExpansion>
   <p:datatable value="#{result.pets}" id="petsResultTable" var="petsResult" ...>
      <p:column filterBy="#{petsResult.name}">
         <h:outputText value="#{petsResult.name}"/>
   </p:datatable>
</p:rowExpansion>

由于在我的示例中有些人有很多宠物,因此我添加了过滤宠物的机会。一切看起来都很好,并且显示正确。过滤器也工作正常。

但我的问题是,如果我过滤人 A 的 pets 表并随后扩展人 B 的 pets 表,则该 pets 表也只包含人 A 的过滤后的 pets 表的结果。所以看起来,过滤之一宠物表覆盖所有宠物表的内容。

是否有可能使过滤结果仅可用于过滤它的特定数据表?或者是否有可能在扩展他们的行时“刷新”另一个人 B 的宠物表?

标签: jsfprimefacesprimefaces-datatable

解决方案


推荐阅读