我使用DateTimeItem
作为开始和结束日期。我不希望用户能够选择无效日期,例如13/44/2014
:
第一张图片是有效日期的示例,第二张图片(下面一张)是无效日期。
如何避免第二次发生?
答案 0 :(得分:1)
尝试使用CustomValidator。
示例代码:
final DateTimeItem dateTimeItem = new DateTimeItem();
final DateTimeFormat dateTimeFormat = DateTimeFormat.getFormat("MM/dd/yyyy");
final DateDisplayFormat dateDisplayFormat = DateDisplayFormat.TOUSSHORTDATE;
dateTimeItem.setDateFormatter(dateDisplayFormat);
dateTimeItem.setTitle("Date");
CustomValidator dateValidator = new CustomValidator() {
@Override
protected boolean condition(Object value) {
try {
// An exception is throws if an invalid date is entered
dateTimeFormat.format((Date) value);
} catch (Exception e) {
return false;
}
return true;
}
};
dateValidator.setErrorMessage("Invalid date");
dateTimeItem.setValidators(dateValidator);
dateTimeItem.setValidateOnChange(true);
快照:
或者尝试使用ChangedHandler。 SmartGWT论坛也解决了同样的问题。
示例代码:
final DateTimeItem dateTimeItem = new DateTimeItem();
dateTimeItem
.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent event) {
try {
// An exception is throws if an invalid date is entered
dateTimeItem.getValueAsDate();
} catch (Exception e) {
SC.say("Invalid Date");
}
}
});
如果您正在寻找日期范围,请尝试使用DateRangeItem,允许用户通过两个RelativeDateItem s选择绝对或相对日期范围(如果allowRelativeDates为真)或两个DateItem。
示例代码:
DateRangeItem dateRangeItem=new DateRangeItem();
dateRangeItem.setFromDate(fromDate);
dateRangeItem.setToDate(toDate);
dateRangeItem.setValue(new DateRange());
快照:
答案 1 :(得分:0)
您必须解析用户在此字段中键入的字符串,并检查这是否是有效日期。
例如:
public static Long parseDate(String value) {
try {
Date date = DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT).parseStrict(value);
return date.getTime();
} catch (IllegalArgumentException e) {
}
try {
Date date = DateTimeFormat.getFormat(PredefinedFormat.DATE_MEDIUM).parseStrict(value);
return date.getTime();
} catch (IllegalArgumentException e) {
}
try {
Date date = DateTimeFormat.getFormat(PredefinedFormat.DATE_LONG).parseStrict(value);
return date.getTime();
} catch (IllegalArgumentException e) {
}
try {
Date date = DateTimeFormat.getFormat(PredefinedFormat.DATE_FULL).parseStrict(value);
return date.getTime();
} catch (IllegalArgumentException e) {
}
return null;
}