是否可以爲數據表編寫自定義過濾器?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