[英]jsf primefaces datatable filtering issues
我正在使用primefaces及其數據表。 幾列是日期或貨幣。 如果我試圖過濾那些,那就有尷尬的行為。 當我開始輸入時,過濾器一直工作到第一個分隔符(例如日期點,所以它只過濾11個。下一個字符讓表格顯示沒有條目)。
是否可以應用日期轉換器?
這是我現在的代碼:
<p:column filterBy="#{cou.startDate}"
headerText="#{text['date']}"
filterMatchMode="contains"
sortBy="#{cou.startDate}" >
<h:outputText value="#{cou.startDate}" >
<f:convertDateTime pattern="dd.MM.yyyy" />
</h:outputText>
</p:column>
您可以改為執行以下操作,而不是直接使用模型中的cou.startDate:
在模型類中創建新的瞬態屬性。
@Transient
private String dateForFilter;
public String getDateForFilter() {
return dateForFilter;
}
public void setDateForFilter(String dateForFilter) {
this.dateForFilter = dateForFilter;
}
在返回數據模型之前創建下面的邏輯。
public List<Item> getDataModel() {
List<Item> lstItem = serviceClass.loadItem(userid);
for (Item item : lstItem) {
DateFormat dateFormat = null;
Date date = item.getDate;
dateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm");
item.setDateForFilter(dateFormat.format(date));
}
return lstItem;
}
更新您的XHTML以使用dateForFilter屬性。
<p:column filterBy="#{item.dateForFilter}">
<f:facet name="header">
Transaction Date
</f:facet>
<h:outputText value="#{item.dateForFilter}" />
</p:column>
注意:如果您沒有使用日期來更新模型類的內容,則只能使用此選項。
HTH。
在primefaces中還沒有現成的日期過濾機制,但是有可能使用自定義過濾器按日期過濾。 您必須為列定義標題構面並使用ajax調用進行“手動”過濾,但它確實有效:
<f:facet name="header">DateRange
<div>
<p:calendar id="from" value="#{bean.from}" styleClass="calendarFilter">
<p:ajax event="dateSelect" listener="#{ctrlr.filterDates()}" update="dataTableId"/>
</p:calendar>
<p:calendar id="to" value="#{bean.to}" styleClass="calendarFilter">
<p:ajax event="dateSelect" listener="#{ctrlr.filterDates()}" update="dataTableId"/>
</p:calendar>
</div>
</f:facet>
據我所知,您不能使用轉換器作為過濾器值。 但是,您可以在bean / service / dao邏輯中處理它。
如果過濾器列匹配某些名稱(如startDate或endDate),則可以對邏輯進行硬編碼並使用SimpleDateFormat來解析值。 更通用的方法是使用反射來獲取與列關聯的類,如果是Date,則使用SimpleDateFormat,如果是數字則使用DecimalFormat,依此類推。
當然,如果您將該查詢傳播到數據庫,您將無法使用like運算符。 如果您使用的是數字,則需要比較相等(同樣適用於日期)。 如果你正在尋找內存中的東西,你將不得不改變你的邏輯。 但它不應該太糟糕。 如果你可以發布一些你的支持bean /服務代碼,我想我可能會更有幫助;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.