设置 DateTimeItem 的范围限制
Set range limits on DateTimeItem
我特别需要的是防止用户在将来输入 date/time。这与禁用特定日期不同,因为我需要禁用特定日期的所有日期。
理想情况下,应禁用任何未来日期。现在,我只是在用户输入无效时间时阻止表单提交,但禁用不需要的日期会更好。
我浏览了 javadoc,但一无所获。可能吗?怎么样?
配置范围只是意味着禁用该范围之外的日期。所以过程与linked answer中的相同。您可以创建一个实用程序方法来更轻松地创建过滤器。例如,configureShowRangeHandler
接受一个 Predicate<Date>
,如果谓词 returns 为假,它将禁用日期。 enableUntilToday
是一个将可选日期限制为今天的简单示例。
{
DatePicker dp = new DatePicker();
Predicate<Date> enableUntilTodayDates = d -> !d.after(new Date());
configureShowRangeHandler(dp, enableUntilTodayDates);
}
static HandlerRegistration configureShowRangeHandler(DatePicker dp, Predicate<Date> fn) {
return dp.addShowRangeHandler(ev -> {
for (Date t = copyDate(ev.getStart()); t.before(ev.getEnd()); addDaysToDate(t, 1)) {
dp.setTransientEnabledOnDates(fn.test(t), t);
}
});
}
copyDate
和 addDaysToDate
是从 CalendarUtil
静态导入的
我特别需要的是防止用户在将来输入 date/time。这与禁用特定日期不同,因为我需要禁用特定日期的所有日期。
理想情况下,应禁用任何未来日期。现在,我只是在用户输入无效时间时阻止表单提交,但禁用不需要的日期会更好。
我浏览了 javadoc,但一无所获。可能吗?怎么样?
配置范围只是意味着禁用该范围之外的日期。所以过程与linked answer中的相同。您可以创建一个实用程序方法来更轻松地创建过滤器。例如,configureShowRangeHandler
接受一个 Predicate<Date>
,如果谓词 returns 为假,它将禁用日期。 enableUntilToday
是一个将可选日期限制为今天的简单示例。
{
DatePicker dp = new DatePicker();
Predicate<Date> enableUntilTodayDates = d -> !d.after(new Date());
configureShowRangeHandler(dp, enableUntilTodayDates);
}
static HandlerRegistration configureShowRangeHandler(DatePicker dp, Predicate<Date> fn) {
return dp.addShowRangeHandler(ev -> {
for (Date t = copyDate(ev.getStart()); t.before(ev.getEnd()); addDaysToDate(t, 1)) {
dp.setTransientEnabledOnDates(fn.test(t), t);
}
});
}
copyDate
和addDaysToDate
是从CalendarUtil
静态导入的