如何解决如何按p:列中的日期类型过滤
我有一个filterBy的问题,当数据是日期时,但是它可以与其他类型的数据一起使用,我使用了我已经在控制器中指定的filterFunction,但是当我进行过滤时,它没有任何作用。这是我的代码:
我的.xhtml文件:
<p:column filterBy="#{deploiement.date_deploiement_test}"
sortBy="#{deploiement.date_deploiement_test}" headerText="date du déploiement version_test" filterFunction="#{listDeploiementController.filterByDate(value,filter,locale)}">
<h:outputText value="#{deploiement.date_deploiement_test}">
<f:convertDateTime pattern="dd-MM-yyyy HH:mm" />
</h:outputText>
</p:column>
我的控制器:
private static final Logger LOG = Logger.getLogger(ListDeploiementController.class.getName());
public boolean filterByDate(Object value,Object filter,Locale locale) {
String filterText = (filter == null) ? null : filter.toString().trim();
if (filterText == null || filterText.isEmpty()) {
return true;
}
if (value == null) {
return false;
}
DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm");
Date filterDate = (Date) value;
Date dateFrom;
Date dateTo;
try {
String fromPart = filterText.substring(0,filterText.indexOf("-"));
String toPart = filterText.substring(filterText.indexOf("-") + 1);
dateFrom = fromPart.isEmpty() ? null : df.parse(fromPart);
dateTo = toPart.isEmpty() ? null : df.parse(toPart);
} catch (ParseException pe) {
LOG.log(Level.SEVERE,"unable to parse date: " + filterText,pe);
return false;
}
return (dateFrom == null || filterDate.after(dateFrom)) && (dateTo == null || filterDate.before(dateTo));
}
如果有人知道该解决方案,请告诉我我该如何解决它,我的项目确实需要它。
谢谢。
解决方法
您的代码有两个问题:
- 错误地分割
filterText
。 - 未意识到一个
Date
对象可能在另一个对象之前/之后,甚至相差一毫秒,而您打算仅根据日,月,年,小时和分钟来评估之前/之后。
我建议您使用modern java.time
日期时间API和相应的格式API(软件包java.time.format
)来完成此操作,而不要使用过时且容易出错的{{1} }日期时间API和java.util
。从 Trail: Date Time 了解有关现代日期时间API的更多信息。
假设SimpleDateFormat
与filterText
类似,我将按照以下步骤进行操作:
10-12-2018 17:05 - 05-08-2020 11:25
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。