After discovering DateField does not really validate dates and finding it
very difficult to make it validate I came up with the following code that I
think makes things much easier.

There are really 2 problems. 

First if you pass DateField a string for the format you get a DateFormat
with lenient set to true. This allows dates such as 00/01/2000 and
45/01/2000 because DateFormat will do it's best to turn any string into a
Date object. This means typos may be converted to a valid date and the
application cannot tell that happened.

The second problem is parse(string) just parses until it finds a valid date
and ignores trailing characters. Again this means typos slip thru for
example 01/01/200- will be the year 200 and not an error.

So I patched DateField with the following:

@Parameter(defaultPrefix = BindingConstants.PROP,
value="symbol:tapestry.DateFormat-lenient")
  private boolean lenient;


Date parseDate(String text) throws ParseException {
          Date date = null;
          if ( lenient ) {
                  date = format.parse(text);
          } else {
                  format.setLenient(false);
                  ParsePosition parsePosition = new ParsePosition(0);
                  date = format.parse(text,parsePosition);
                  if (  parsePosition.getIndex() != text.length() ) {
                          throw new
ParseException(messages.format("core-date-value-not-parseable"),
                                          parsePosition.getErrorIndex());
                  }
          }
          return date;
  }

I'd like to submit this as a patch but I have the following question:

What should the default for lenient be? Personally I think the default
should be false but that's not strictly  backward compatible. So if you
wanted the old behavior you would need to override
tapestry.DateFormat-lenient. My thought is most people do not want the old
behavior and are unaware DateField allows "invalid dates"



--
View this message in context: 
http://tapestry.1045711.n5.nabble.com/Proposal-for-DateField-validation-patch-tp5715702.html
Sent from the Tapestry - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to