PF过滤包含日期的数据表列
Posted
技术标签:
【中文标题】PF过滤包含日期的数据表列【英文标题】:PF Filtering a Datatable column which contains a date 【发布时间】:2012-06-06 10:47:41 【问题描述】:我在数据表中有一个列,我想使用以下代码添加一个过滤器:
<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 但不适用于日期。这是什么原因,在这种情况下如何使过滤器工作?
【问题讨论】:
【参考方案1】: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>
...
【讨论】:
什么是 ctrlr.filterDates() @WiXXeY - 它应该是控制器 bean 中根据日历组件中的值过滤日期的方法。它没有提供,必须实施。【参考方案2】:对于更简单的解决方案,您只需为日期添加一个占位符,使用 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。
【讨论】:
以上是关于PF过滤包含日期的数据表列的主要内容,如果未能解决你的问题,请参考以下文章