簡體   English   中英

jsf primefaces數據表過濾問題

[英]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.

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