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