是否可以为数据表编写自定义过滤器?Primefaces自定义数据表过滤器
我想过滤关于属性status_flag的数据。这个status_flag可以有以下值:available,enable,disabled。
我需要一个过滤器方法,它向我显示总列表或没有禁用的总列表。
是否可以为数据表编写自定义过滤器?Primefaces自定义数据表过滤器
我想过滤关于属性status_flag的数据。这个status_flag可以有以下值:available,enable,disabled。
我需要一个过滤器方法,它向我显示总列表或没有禁用的总列表。
对于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>
的Java鉴于filteredResults命名视图的setter和getter:
public void setFilteredResults(List<?> filteredResults) {
this.filteredResults = applyPremiumFilters(filteredResults, filterValue);
}
public List<?> getFilteredResults() {
return this.filteredResults;
}
其余的是Javascript代码在过滤器组件中的值发生变化时对dataTable应用过滤器。
当然可以,
我下面给你一个例子:
<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
希望这将有助于...
让我修改上述大卫
<p:column filterBy="status"
filterOptions="#{yourBean.statusOptions}"
filterMatchMode="contains">
...
</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"));
options.add(new SelectItem("available enable", "Without Disabled"));
return options;
}
查看上面的代码,它改变了一点点来解决你的问题。
希望这将有助于...
您不能认真对待这一点。这对我来说是不可接受的答案。您应该已经知道,您可以自由编辑其他答案并发表评论。 – alexander
不,我想在视图中这样,所以我不必重新加载数据。奇怪的是,您无法为数据表中的定义自定义filterMatchMode,但对于(根据说明文件)定义了自定义filterMatchMode。 –
fsch