DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15499>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=15499 Validator does not successfully validate empty date fields. (#10349 revisited) Summary: Validator does not successfully validate empty date fields. (#10349 revisited) Product: Struts Version: 1.1 Beta 2 Platform: All OS/Version: All Status: NEW Severity: Normal Priority: Other Component: Validator Framework AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] In bug #10349 it was reported that Validator does not successfully validate empty date fields. It appears to me that the description of the problem and solution in that report is incorrect. StrutsValidator.validateDate returns null when the field value is blank or null. Commons Validator passes the result of the call to validateDate to its isValid method: private boolean isValid(Object result) { boolean bValid = false; if (result instanceof Boolean) { Boolean valid = (Boolean)result; bValid = valid.booleanValue(); } else { bValid = (result != null); } return bValid; } And so we see the "invalid date" result from a call with an empty field. I propose having StrutsValidator.validateDate return a dummy Date object when the field is empty. A revised validateDate method is: public static Date validateDate(Object bean, ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest request) { Date result = null; String value = null; if (isString(bean)) { value = (String) bean; } else { value = ValidatorUtil.getValueAsString(bean, field.getProperty()); } String datePattern = field.getVarValue("datePattern"); String datePatternStrict = field.getVarValue("datePatternStrict"); Locale locale = StrutsValidatorUtil.getLocale(request); if (!GenericValidator.isBlankOrNull(value)) { try { if (datePattern != null && datePattern.length() > 0) { result = GenericTypeValidator.formatDate(value, datePattern, false); } else if (datePatternStrict != null && datePatternStrict.length () > 0) { result = GenericTypeValidator.formatDate(value, datePatternStrict, true); } else { result = GenericTypeValidator.formatDate(value, locale); } } catch (Exception e) { LOG.error(e.getMessage(), e); } if (result == null) { errors.add(field.getKey(), StrutsValidatorUtil.getActionError (request, va, field)); } } else { result = new Date(); } return result; } This approach appears to work in the testing I've done here. It allows me to validate non-required date fields. It appears to me that the same problem arises for all of the numeric type checks in StrutsValidator as well. -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>