smartGWT日期输入验证器

时间:2014-05-21 18:08:39

标签: java gwt smartgwt

我使用DateTimeItem作为开始和结束日期。我不希望用户能够选择无效日期,例如13/44/2014

第一张图片是有效日期的示例,第二张图片(下面一张)是无效日期。

enter image description here

如何避免第二次发生?

2 个答案:

答案 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);

快照:

enter image description here


或者尝试使用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());

快照:

enter image description here

答案 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;
}