2012-06-01 30 views
6

我在一个数据表中的列和我要添加的过滤器与该代码的DataTable柱:PF过滤含有日期

<p:dataTable id="aDataTable" var="aVariable" value="#{aView.values}" paginator="true" rows="10" selectionMode="single" selection="#{aView.selection}" onRowSelectUpdate="aForm"> 
       <f:facet name="header"> 
        A List 
       </f:facet> 
       <p:column sortBy="#{aVariable.id}" filterBy="#{aVariable.id}" filterEvent="change"> 
        <f:facet name="header"> 
         <h:outputText value="No"/> 
        </f:facet> 
        <h:outputText value="#{aVariable.id}"/> 
       </p:column> 
       <p:column sortBy="#{aVariable.date}" filterBy="#{aVariable.date}" filterEvent="change"> 
        <f:facet name="header"> 
         <h:outputText value="Date"/> 
        </f:facet> 
</p:dataTable> 

日期的形式输入的格式为:

<h:outputText value="Date: *"/> 
<p:calendar pattern="dd/MM/yyyy" value="#{aView.value.date}"/> 

过滤器正在工作的id,但不是日期。这是什么原因,以及如何在这种情况下使过滤器工作?

回答

11

在primefaces中还没有现成的日期过滤机制,但可以使用自定义过滤器按日期进行过滤。你必须定义一个头方面为您列和使用Ajax调用为“手动”的过滤,但它的工作:

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

...

+0

感谢kostja的澄清。 – lamostreta

+0

不客气。 – kostja

+0

什么是ctrlr.filterDates() – WiXXeY

7

对于简单的解决方案,你只需要添加一个占位符将String作为filterBy组件用法的数据类型的日期。

步骤:

在模型类中创建一个新的瞬态属性。

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

+0

谢谢你的答案。我会尝试的。 – lamostreta