Primefaces数据表中的自定义过滤器

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(就像我在最近的项目中那样),我将描述对我有用的内容.

我使用这些关键步骤扩展了过滤行为

  • 将一个普通的JSF输入组件放入列的标题面而不是使用filterBy属性
  • 将javascript回调附加到用户输入触发的此组件,该组件调用 PF('dataTableWidgetVar').filter()
  • 将filteredValue属性添加到dataTable,它将Java setter中的自定义过滤器应用于现有过滤器之上

关键是要利用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应用过滤器.


Dav*_* H. 8

当然可以,

我将在下面给你一个例子:

<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

希望它会有所帮助......