[英]Primefaces custom filter in datatable
是否可以為數據表編寫自定義過濾器?
我想過濾有關屬性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>
在視圖命名視圖中的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.