Según las sugerencias que recibí, esto es lo que se me ocurrió que funciona al limitar las fechas seleccionables solo al día actual y después. Esto funciona en 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);
}
}
});
está completo y aquí están los static
métodos auxiliares para la manipulación de las fechas:
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));
}
Excelente respuesta, pero me gustaría abordar un pequeño error en el método onShowRangeHandler. El bucle también debe estar limitado al rango final (de lo contrario arroja excepciones silenciosas de afirmación dev-environment) '\t final long endTime = event.getEnd(). GetTime(); while (d.antes (hoy) && d.getTime() <= endTime) { dateBox.getDatePicker(). SetTransientEnabledOnDates (false, d); d = nextDay (d); } ' – Chris
Además, durante una transición del horario de verano al horario estándar, este código entrará en un ciclo infinito –