【问题标题】:Primefaces lazy datatable: put my own filter instead of GlobalFilterPrimefaces 惰性数据表:放置我自己的过滤器而不是 GlobalFilter
【发布时间】:2018-08-24 12:51:39
【问题描述】:

我想在我的惰性数据表上添加一些额外的过滤器,但这些字段不是基于我拥有的字段(实际上我的过滤器是 dateFrom 和 dateTo,我只有一个字段“Date”)。

我想在我的数据表顶部有两个额外的过滤器字段,而不是全局过滤器:

    <f:facet name="header">
    <p:outputPanel>
    <p:inputText id="globalFilterOther" onkeyup="PF('myTable').filter()" style="display:inlineblock;"/>
    <p:inputText id="globalFilterAnOtherFilter" onkeyup="PF('myTable').filter()" style="display:inlineblock;"/>
    </p:outputPanel>
    </f:facet> 

问题是,一旦我将 id 更改为全局过滤器以外的其他内容,就没有检测到过滤器。我该怎么办?

【问题讨论】:

  • 就像您通常会创建任何过滤事物一样。通过它们的value 属性和执行实际过滤的方法(在本例中为lazyDataModel 中的加载方法)将输入绑定到支持bean 中的字段,访问该bean 中的字段并在您的技术过滤中使用它们...
  • @Kukeltje 会起作用的。将字段绑定到 Map 并将该映射添加到过滤器侦听器中的过滤器也是一种选择。

标签: primefaces filter datatable


【解决方案1】:

最简单的方法是将两个(或更多)额外的过滤器字段绑定到Map&lt;String,String&gt;。例如,将名为 filters 的映射添加到您的 bean:

private Map<String,String> filters = new HashMap<>();
// Include getter and setter

...并将过滤器绑定到地图的属性:

<p:inputText value="#{myBean['field']}"
             onkeyup="PF('myTable').filter()"/>
<p:inputText value="#{myBean['otherField']}"
             onkeyup="PF('myTable').filter()"/>

现在,您唯一需要做的就是向p:dataTable 添加一个过滤器侦听器,然后将filters 映射添加到事件过滤器中,您就完成了。

豆子:

public void onFilter(FilterEvent event){
  event.getFilters().putAll(filters);
}

XHTML:

<p:dataTable ...>
  <p:ajax event="filter" listener="#{myBean.onFilter}"/>
</p:dataTable>

【讨论】:

  • 我会看看我是否可以增强这个答案以成为一个完整的例子。我已经看到初学者在结合惰性数据模型和附加过滤器时遇到了困难。我对过滤器使用了生产者方法并拥有过滤器(确实在地图中,但多租户除外)
猜你喜欢
  • 2015-04-10
  • 2014-01-04
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 2019-03-04
  • 2013-08-01
  • 2013-12-13
  • 2014-08-09
相关资源
最近更新 更多