如何使用 com.google.gwt.user.datepicker.client.DateBox 限制可用的日期范围
Posted
技术标签:
【中文标题】如何使用 com.google.gwt.user.datepicker.client.DateBox 限制可用的日期范围【英文标题】:How to limit the available Date ranges with the com.google.gwt.user.datepicker.client.DateBox 【发布时间】:2011-08-05 02:48:52 【问题描述】:我需要限制Dates
用户可以从com.google.gwt.user.datepicker.client.DateBox
中选择的内容。
我似乎无法弄清楚如何限制最小 Date
,因此他们无法选择过去的日期。
如果我不能使用 com.google.gwt.user.datepicker.client.DateBox
做到这一点,是否有替代的 DateBox
小部件可以让我获得这种灵活性?
【问题讨论】:
【参考方案1】:根据我收到的建议,我提出了将可选日期限制在当天及之后的建议。这适用于 GWT 2.1.1
final DateBox dateBox = new DateBox();
dateBox.addValueChangeHandler(new ValueChangeHandler<Date>()
@Override
public void onValueChange(final ValueChangeEvent<Date> dateValueChangeEvent)
if (dateValueChangeEvent.getValue().before(today()))
dateBox.setValue(today(), false);
);
dateBox.getDatePicker().addShowRangeHandler(new ShowRangeHandler<Date>()
@Override
public void onShowRange(final ShowRangeEvent<Date> dateShowRangeEvent)
final Date today = today();
Date d = zeroTime(dateShowRangeEvent.getStart());
while (d.before(today))
dateBox.getDatePicker().setTransientEnabledOnDates(false, d);
d = nextDay(d);
);
为了完整起见,这里是用于操作日期的 static
辅助方法:
private static Date today()
return zeroTime(new Date());
/** this is important to get rid of the time portion, including ms */
private static Date zeroTime(final Date date)
return DateTimeFormat.getFormat("yyyyMMdd").parse(DateTimeFormat.getFormat("yyyyMMdd").format(date));
private static Date nextDay(final Date date)
return zeroTime(new Date(date.getTime() + 24 * 60 * 60 * 1000));
【讨论】:
很好的答案,但我想解决 onShowRangeHandler 方法中的一个小错误。循环还应该限制在结束范围内(否则会引发静默的开发环境断言异常)` final long endTime = event.getEnd().getTime(); while (d.before(today) && d.getTime() 另外,在从夏令时到标准时间的转换过程中,这段代码会进入一个无限循环 请使用com.google.gwt.user.datepicker.client.CalendarUtil
为当前日期增加一天:CalendarUtil.addDaysToDate (d, 1);
。这也适用于从夏令时到标准时间的更改,反之亦然。而且您不必应付时间部分!【参考方案2】:
我在这里猜测,但您可能需要使用 addValueChangeHandler。一个例子:
datebox.addValueChangeHandler(new ValueChangeHandler<Date>()
public void onValueChange(ValueChangeEvent<Date> event)
Date date = event.getValue();
if (date.before(new Date()))
fromDatePicker.setValue(new Date());
);
当用户以某种方式选择过去的日期时,它会自动将其设置为当前日期(或任何适合您需要的日期)。
【讨论】:
我宁愿只是禁用过去的任何日期,并避免他们选择一个的可能性。有没有办法禁用日历小部件中的实际可点击日期? 这是在正确的轨道上,但它本身就有缺陷。由于new Date()
与它相关联的时间,date.before(new Date())
将总是失败。我不得不抽出时间让这种方法发挥作用。现在我可以将日期重置为今天,但我仍在寻找完全禁用过去日期的方法。以上是关于如何使用 com.google.gwt.user.datepicker.client.DateBox 限制可用的日期范围的主要内容,如果未能解决你的问题,请参考以下文章
GWT - 偶尔出现 com.google.gwt.user.client.rpc.SerializationException
java.lang.ClassNotFoundException: com.google.gwt.user.client.rpc.RemoteService
尽早避免 GWT 的 com.google.gwt.user.client.rpc.SerializationException 的最佳实践
“com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException”出现在控制台上
Core Exception [code 0] Invocation of com.google.gwt.user.tools.WebAppCreator failed这是啥问题啊
GWT Servlet 错误 com.google.gwt.user.client.rpc .StatusCodeException: Tomcat 服务器上的 404