设置 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);
        }
    });
}
  • copyDateaddDaysToDate 是从 CalendarUtil
  • 静态导入的