2011-01-25 103 views
7

我正在使用primefaces及其數據表。幾列是日期或貨幣。如果我試圖過濾這些,那就會有尷尬的行爲。當我開始輸入過濾器的作品時,直到第一個分隔符(例如對於日期的點,所以它只過濾爲11,下一個字符讓表格不顯示條目)。jsf primefaces數據過濾問題

是否可以應用日期轉換器?

這裏是我的代碼現在:

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

回答

2

據我所知,你不能用一個轉換器,過濾器值。但是,您可以在bean/service/dao邏輯中處理這個問題。

如果過濾器列與startDate或endDate等特定名稱匹配,則可以硬編碼您的邏輯並使用SimpleDateFormat解析值。更通用的方法是使用反射來獲取與該列關聯的類,如果是Date,則使用SimpleDateFormat;如果數字是DecimalFormat,則使用DecimalFormat等等。

當然,如果您將該查詢傳播到數據庫,您將無法使用類似的運算符。如果你使用的是數字,你需要比較是否相等(同樣適用於日期)。如果你正在尋找內存中的東西,你將不得不改變你的邏輯。但它不應該太糟糕。如果你可以發佈一些支持bean /服務代碼,我想我可能會更有幫助;)

2

在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> 
3

而不是直接使用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。