我在数据表中有一个列,我想添加一个包含此代码的过滤器:
<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但不适用于日期。这是什么原因以及如何在这种情况下使过滤器工作?
答案 0 :(得分: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>
...
答案 1 :(得分: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。