Primefaces lazy datatable:放置我自己的过滤器而不是GlobalFilter

时间:2018-03-15 15:59:54

标签: primefaces filter datatable

我想在我的懒数据表上添加一些额外的过滤器,但这些字段不是基于我的字段(实际上我的过滤器是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更改为除全局Filter之外的其他内容,就不会检测到过滤器。我该怎么办?

1 个答案:

答案 0 :(得分:2)

最简单的方法是将两个(或更多)额外过滤器字段绑定到Map<String,String>。例如,向您的bean添加名为filters的地图:

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>