簡體   English   中英

Primefaces數據表中的自定義過濾器

[英]Primefaces custom filter in datatable

是否可以為數據表編寫自定義過濾器?

我想過濾有關屬性status_flag的數據。 此status_flag可以具有以下值:available,enable,disabled。

我需要一個過濾方法,向我顯示總列表或沒有禁用的總列表。

對於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>

在視圖命名視圖中的filteredSetter和getter of filteredResults:

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

希望它會有所幫助......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM