Recipe8.6.Validating Dates


Recipe 8.6. Validating Dates

Problem

You want to validate a calendar date and time field by specifying a specific format pattern.

Solution

Use the Validator's date rule to specify the expected pattern that the date must match. Example 8-8 shows some different ways of using this rule.

Example 8-8. Using the Validator's date rule
<field property="date1" depends="date">     <arg key="Date1" resource="false"/>     <var>         <var-name>datePattern</var-name>         <var-value>MM/dd/yyyy</var-value>     </var> </field> <field property="date2" depends="date">     <arg key="Date2" resource="false"/>     <var>         <var-name>datePatternStrict</var-name>         <var-value>MM/dd/yyyy</var-value>     </var> </field> <field property="dateTime" depends="date">     <arg key="DateTime" resource="false"/>     <var>         <var-name>datePattern</var-name>         <var-value>MM/dd/yy HH:mm</var-value>     </var> </field>

Discussion

Calendar dates have got to be one of the hardest field types to work with in a web application. The developer wants to ensure that only valid data gets into the system, but the users want to be able to enter the date in various formats. The Validator helps mitigate these conflicting desires by providing a robust rule for validating dates and times.

The date rule uses a Validator variable (var) to specify the pattern that a property value must match. The datePattern variable specifies the pattern for formatting the value using the java.text.SimpleDateFormat class. If SimpleDateFormat can format the value into a date, then the validation passes; otherwise, the validation fails.

If datePatternStrict is used instead of datePattern, the length of the value must match the length of the pattern. Suppose you are validating against the pattern of MM/dd/yyyy. The user inputs 5/10/1963 to represent May 10, 1963. If datePattern is used, the value will pass validation. If datePatternStrict is used, however, the validation won't pass because the month portion has one digit, not two, as specified by the pattern.

The date rule allows the SimpleDateFormat to interpret the input value leniently. For example, the value of 07/32/2004 passes validation! It's interpreted as August 1, 2004. Though you can't change the date rule to use strict parsing, you can add the mask rule to enforce stricter formats.

See Also

The JavaDocs for the SimpleDateFormat class have all the information you need to come up with a suitable formatting patterns. This documentation can be found at http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html.

Use of the mask rule is described in Recipe 8.2. Other considerations when working with dates are discussed in Recipe 3.13.



    Jakarta Struts Cookbook
    Jakarta Struts Cookbook
    ISBN: 059600771X
    EAN: 2147483647
    Year: 2005
    Pages: 200

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net