fsc*_*sch 5 jsf primefaces jsf-2
是否可以为数据表编写自定义过滤器?
我想过滤有关属性status_flag的数据.此status_flag可以具有以下值:available,enable,disabled.
我需要一个过滤方法,向我显示总列表或没有禁用的总列表.
Ond*_*Mih 10
对于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>
Run Code Online (Sandbox Code Playgroud)
在视图命名视图中的filteredSetter和getter of filteredResults:
public void setFilteredResults(List<?> filteredResults) {
this.filteredResults = applyPremiumFilters(filteredResults, filterValue);
}
public List<?> getFilteredResults() {
return this.filteredResults;
}
Run Code Online (Sandbox Code Playgroud)
其余是Javascript代码,当过滤器组件中的值更改时,将对dataTable应用过滤器.
当然可以,
我将在下面给你一个例子:
<p:column filterBy="status"
filterOptions="#{yourBean.statusOptions}"
filterMatchMode="exact">
...
</p:column>
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
使用SelectItem.
你会在这里找到一个例子http://www.primefaces.org/showcase/ui/datatableFiltering.jsf
希望它会有所帮助......