You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Greg Woolsey (JIRA)" <ta...@jakarta.apache.org> on 2006/12/10 03:36:21 UTC

[jira] Commented: (TAPESTRY-904) DatePicker SimpleDateParser needs "strict" parser

    [ http://issues.apache.org/jira/browse/TAPESTRY-904?page=comments#action_12457158 ] 
            
Greg Woolsey commented on TAPESTRY-904:
---------------------------------------

Here's what we've created in 4.1.1 for use in our app:

public class StrictDateTranslator extends DateTranslator {
	public StrictDateTranslator() {
		super();
	}

	public StrictDateTranslator(String initializer) {
		super(initializer);
	}

   @Override
   protected String defaultPattern()
   {
       return "MM/dd/yy";
   }

   @Override
   protected String getMessageKey() {
   	"invalid-date";
   }
   
   @Override
	protected String buildMessage(ValidationMessages messages, IFormComponent field, String key)
   {
       String label = field.getDisplayName();

       Object[] parameters = getMessageParameters(messages.getLocale(), label);

       return messages.formatValidationMessage(field.getMessages().getMessage(key), key, parameters);
   }

   @Override
	public SimpleDateFormat getDateFormat(Locale locale) {
       return new StrictDateFormat(getPattern(), new DateFormatSymbols(locale));
   }

   /**
    * @see org.apache.tapestry.form.translator.AbstractTranslator#getMessageParameters(java.util.Locale,
    *      java.lang.String)
    */
   @Override
   protected Object[] getMessageParameters(Locale locale, String label)
   {
       String pattern = getDateFormat(locale).toLocalizedPattern().toUpperCase(locale);
       pattern += "[YY]";

       return new Object[]{ label, pattern };
   }

Where StrictDateFormat validates that the entire input string is part of the parsed date:

public class StrictDateFormat extends SimpleDateFormat {
	public StrictDateFormat(String pattern, DateFormatSymbols formatSymbols) {
		super(pattern, formatSymbols);
		setLenient(false);
	}

	@Override
	public Object parseObject(String source) throws ParseException {
       ParsePosition pos = new ParsePosition(0);
       Object result = parseObject(source, pos);
       if (pos.getIndex() != source.length()) {
           throw new ParseException("Format.parseObject(String) failed", pos.getErrorIndex());
       }
       return result;
    }
}


> DatePicker SimpleDateParser needs "strict" parser
> -------------------------------------------------
>
>                 Key: TAPESTRY-904
>                 URL: http://issues.apache.org/jira/browse/TAPESTRY-904
>             Project: Tapestry
>          Issue Type: Improvement
>          Components: Framework
>    Affects Versions: 4.1
>            Reporter: phillip rhodes
>         Assigned To: Jesse Kuhnert
>            Priority: Minor
>             Fix For: 4.1.1
>
>
> The datepicker is accepting dates such as 04/99/2005  The translator converts this to 07/08/2006  I looked at the code and it is using SimpleDateFormat() without a strict parser.
> Perhaps, the datepicker can accept an optional parameter that would control if the SimpleDateFormat is true/false?
> Thanks.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org