是否可以为数据表编写自定义过滤器?
我想过滤有关属性status_flag的数据。此status_flag可以具有以下值:available,enable,disabled。
我需要一个过滤方法,向我显示总列表或没有禁用的总列表。
答案 0 :(得分:9)
对于Primefaces 5,有一个新的属性filterFunction可以在Java代码中定义自定义过滤器:http://blog.primefaces.org/?p=3084
但是,过滤器输入仍然是输入文本中的字符串。
如果您需要一个自定义组件来输入过滤器值,或者您仍然坚持使用Primefaces 4(就像我最近的项目一样),我将描述对我有用的内容。
我使用这些关键步骤扩展了过滤行为
filterBy
属性PF('dataTableWidgetVar').filter()
关键是要利用filteredValue属性 - 当调用Primefaces filter()函数或者当primefaces过滤器更改时,filteredValue被设置为列出过滤值(如果没有应用过滤器,则为null)。然后Primefaces从getter读取filteredValues以更新dataTable中的项目列表。如果我们将过滤器置于这些调用之间(在getter或setter中,setter效率更高,因为只有在过滤器更改时才调用),我们使用过滤器修改原始过滤列表并通过getter返回。
一些代码:
使用inputText作为过滤器组件定义数据表:
<p:dataTable filteredValue="#{view.filteredResults} >
...
<p:columnGroup type="header">
...
<p:row>
...
<p:column>
<f:facet name="header">
<p:inputText value="#{view.filterValue}" />
</f:facet>
</p:column>
...
</p:dataTable>
在视图命名视图中的filteredRerults的Java Setter和Getter:
public void setFilteredResults(List<?> filteredResults) {
this.filteredResults = applyPremiumFilters(filteredResults, filterValue);
}
public List<?> getFilteredResults() {
return this.filteredResults;
}
其余是Javascript代码,用于在过滤器组件中的值更改时对dataTable应用过滤器。
答案 1 :(得分:7)
当然可以,
我将在下面举例说明:
<p:column filterBy="status"
filterOptions="#{yourBean.statusOptions}"
filterMatchMode="exact">
...
</p:column>
Java代码:
public List<SelectItem> getStatusOptions()
{
List<SelectItem> options = new ArrayList<SelectItem>();
options.add(new SelectItem("avalaible", "Avalaible"));
options.add(new SelectItem("enable", "Enable"));
options.add(new SelectItem("disabled", "Disabled"));
return options;
}
使用SelectItem。
您可以在http://www.primefaces.org/showcase/ui/datatableFiltering.jsf
找到示例希望它会有所帮助...