Primefaces lazy datatable:放置我自己的筛选器而不是GlobalFilter
我想在我的惰性数据表上添加一些额外的过滤器,但是这些字段不是基于我的字段(实际上我的过滤器是dateFrom和dateTo,我只有一个字段“Date”) 我希望在数据表顶部有两个额外的筛选器字段,而不是全局筛选器:Primefaces lazy datatable:放置我自己的筛选器而不是GlobalFilter,primefaces,filter,datatable,Primefaces,Filter,Datatable,我想在我的惰性数据表上添加一些额外的过滤器,但是这些字段不是基于我的字段(实际上我的过滤器是dateFrom和dateTo,我只有一个字段“Date”) 我希望在数据表顶部有两个额外的筛选器字段,而不是全局筛选器: <f:facet name="header"> <p:outputPanel> <p:inputText id="globalFilterOther" onkeyup="PF('myTable').filter()" style=
<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更改为全局筛选器以外的内容,就不会检测到任何筛选器。怎么做?最简单的方法是将两个(或更多)额外的过滤器字段绑定到
映射。例如,将名为filters
的映射添加到bean中:
private Map<String,String> filters = new HashMap<>();
// Include getter and setter
XHTML:
<p:dataTable ...>
<p:ajax event="filter" listener="#{myBean.onFilter}"/>
</p:dataTable>
就像你通常会创建任何过滤东西的东西一样。通过其值
属性和进行实际筛选的方法(在本例中为lazyDataModel中的load方法)将输入绑定到backingbean中的字段访问该bean中的字段并在技术筛选中使用它们…@Kukeltje,这将起作用。将字段绑定到映射
并将该映射添加到筛选器侦听器中的筛选器也是一个选项。我将看看是否可以将此答案增强为完整示例。我看到初学者在努力将lazydatamodel和附加过滤器结合起来。我为过滤器使用了producer方法,并拥有过滤器(实际上是在一个映射中,多租户的映射除外)
public void onFilter(FilterEvent event){
event.getFilters().putAll(filters);
}
<p:dataTable ...>
<p:ajax event="filter" listener="#{myBean.onFilter}"/>
</p:dataTable>