I appreciate your help.

I gave up on Valang.  I don't think it works.

Here is what I did for others using Spring MVC:

Created a new class which implemented Validator with the following validate
method:

    public void validate(Object target, Errors errors) {
        KeyMetadata givenData = (KeyMetadata)target;

        if (givenData == null) {
            errors.reject("errors.nullpointer", "Null data received");
        } else {
            Date endDate = givenData.getEndDate();
            Date startDate = givenData.getStartDate();
            if (endDate != null && endDate.before(startDate) ||
                 endDate != null && endDate.equals(startDate)) {
            errors.rejectValue("endDate", "errors.invalidEndDate",
                    "The End Date cannot be before or equal to the start
date.");
            }
        }
    }
Then I added this validator to applicationContext-validation.xml as a <bean>
definition.

Then I added the reference to the list of validators for the
specific FormController that I wanted to validate on in
dispatcher-servlet.xml.

        <property name="validators">
                <list>
                    <ref bean="beanValidator"/>      <!--Commons Server-side
validation -->
                    <ref bean="keyMetadataValidator"/>      <!--endDate
validator -->
                </list>
        </property>

Regards,
Abe



On 8/9/07, Matt Raible <[EMAIL PROTECTED]> wrote:
>
> On 8/8/07, Developer Abe <[EMAIL PROTECTED]> wrote:
> > Hi Matt,
> >
> > I read that post and it was helpful but I still don't think I understand
> > what is meant by
> >
> > "use a String property, and then do some custom formatting (after
> > validation) to make it into a date".
> >
> > If I understand correctly when you said that it doesn't make sense to
> >
> > "to validate a java.util.Date (since it's already a java.util.Date)"
> >
> > I am a bit confused because I thought the validator was being used to
> ensure
> > the text input from the form was in the correct format before being
> > processed by server side logic.
>
> It is with Struts, but not with Spring MVC. With Spring MVC, you use a
> CustomDateEditor to register the format to use. A type mismatch error
> will be thrown if the format is incorrect. Struts 2 works this same
> way, as do many others. This conversion error is lumped into
> validation, but it's not really validation IMO.
>
> >
> >
> > I also am trying to add validation logic to verify that the start date
> is
> > before the end date.  It is breaking with a similar error:
> >
> > [keymanager] DEBUG [main]
> > KeyMetadataFormController.showNewForm(322) | Displaying new
> > form
> > [keymanager] DEBUG [main]
> > KeyMetadataFormControllerTest.testSave(51) | 2005-01-0
> > 1 00:00:00.0
> > [keymanager] DEBUG [main]
> > KeyMetadataFormControllerTest.testSave(52) | 2007-01-0
> > 1 00:00:00.0
> > [keymanager] DEBUG [main]
> > KeyMetadataFormController.processFormSubmission(256) |
> >  Data binding errors: 1
> > [keymanager] DEBUG [main]
> > KeyMetadataFormControllerTest.testSave (58) | org.sprin
> > gframework.validation.BeanPropertyBindingResult: 1 errors
> > Field error in object 'keyMetadata' on field 'endDate': rejected value
> [Mon
> > Jan
> > 01 00:00:00 PST 2007]; codes [endDate.keyMetadata.endDate
> > ,endDate.endDate,endDat
> > e.java.util.Date,endDate]; arguments []; default message [The End Date
> has
> > to be
> >  after the Start Date]
> > [keymanager] INFO [main]
> > KeyMetadataFormControllerTest.endTransaction(290) | Rol
> >  led back transaction after test execution
> >
> >
> > I took out the "date" in depends just to see if I could get farther:
> >
> > //validation.xml
> > <field property="startDate" depends="required">
> >               <arg0 key="keyMetadata.startDate"/>
> >               <var>
> >                   <var-name>datePattern</var-name>
> >                   <var-value>MM/dd/yyyy</var-value>
> >               </var>
> >           </field>
> >           <field property="endDate" depends="required">
> >               <arg0 key=" keyMetadata.endDate"/>
> >               <var>
> >                   <var-name>datePattern</var-name>
> >                   <var-value>MM/dd/yyyy</var-value>
> >               </var>
> >           </field>
> >
> > //dispatcher-servlet.xml
> > <bean id="keyMetadataFormController"
> > class="
> com.intuit.security.keymanager.webapp.controller.KeyMetadataFormController
> ">
> >         <property name="validators">
> >                 <list>
> >                     <ref bean="beanValidator"/>      <!--Commons
> Server-side
> > validation -->
> >                     <ref bean="endDateValidator"/>       <!--Spring
> > validation -->
> >                 </list>
> >         </property>
> >         <property name="successView" value="redirect:keymetadatas.html
> "/>
> >         <property name="keyMetadataManager" ref="keyMetadataManager"/>
> >         <property name="typeCodeManager" ref="typeCodeManager"/>
> >     </bean>
> >
> >
> > //applicationContext-validation.xml
> > <bean id="endDateValidator"
> > class="org.springmodules.validation.valang.ValangValidator">
> >         <property name="valang">
> >             <value>
> >             <![CDATA[
> >                 { endDate : endDate < startDate : 'The End Date has to
> be
> > after the Start Date'}
> >             ]]>
> >             </value>
> >         </property>
> >         <property name="dateParserRegistrations">
> >             <map>
> >                 <entry key="^d{2}/d{2}/d{4}$" value="MM/dd/yyyy"/>
> >             </map>
> >         </property>
> >     </bean>
>
> It looks like you may be trying to mix Valang Validator and Commons
> Validator. I've never worked with Valang validator, so I don't know if
> I can offer much assistance.
>
> Matt
>
> >
> >
> > Regards,
> > Abe
> >
> >
> >
> > On 8/8/07, Matt Raible <[EMAIL PROTECTED]> wrote:
> > >
> > > This should help:
> > >
> > >
> >
> http://www.jroller.com/raible/entry/validating_dates_with_commons_validator
> > >
> > > Matt
> > >
> > > On 8/8/07, Developer Abe <[EMAIL PROTECTED]> wrote:
> > > > Getting the following:
> > > >
> > > > [keymanager] DEBUG [main]
> > > > KeyMetadataFormController.showNewForm(322) | Displayin
> > > > g new form
> > > > [keymanager] DEBUG [main]
> > > > KeyMetadataFormControllerTest.testSave(51) | 2005-01-0
> > > > 1 00:00:00.0
> > > > [keymanager] DEBUG [main]
> > > > KeyMetadataFormControllerTest.testSave(52) | 2007-01-0
> > > > 1 00:00:00.0
> > > > [keymanager] DEBUG [main]
> > > > KeyMetadataFormController.processFormSubmission (256) |
> > > >  Data binding errors: 2
> > > > [keymanager] DEBUG [main]
> > > > KeyMetadataFormControllerTest.testSave (58) | org.sprin
> > > > gframework.validation.BeanPropertyBindingResult: 2
> > errors
> > > > Field error in object 'keyMetadata' on field 'startDate': rejected
> value
> > > > [Sat Ja
> > > > n 01 00:00:00 PST 2005]; codes [
> > > > errors.date.keyMetadata.startDate,errors.date.st
> > > > artDate,errors.date.java.util.Date,errors.date]; arguments
> > > > [org.springframework.
> > > > context.support.DefaultMessageSourceResolvable: codes [
> > > > keyMetadata.startDate]; a
> > > > rguments []; default message [keyMetadata.startDate]]; default
> message
> > > > [errors.d
> > > > ate]
> > > > Field error in object 'keyMetadata' on field 'endDate': rejected
> value
> > [Mon
> > > > Jan
> > > > 01 00:00:00 PST 2007]; codes
> > > > [errors.date.keyMetadata.endDate,errors.date.endDat
> > > > e,errors.date.java.util.Date,errors.date]; arguments
> > > > [org.springframework.contex
> > > > t.support.DefaultMessageSourceResolvable: codes [
> > > > keyMetadata.endDate]; arguments
> > > >  []; default message [ keyMetadata.endDate]]; default message
> > [errors.date]
> > > > [keymanager] INFO [main]
> > > > KeyMetadataFormControllerTest.endTransaction(290) | Rol
> > > > led back transaction after test execution
> > > > [keymanager] INFO [main]
> > > > KeyMetadataFormControllerTest.startNewTransaction(323)
> > > > | Began transaction (1): transaction manager
> > > > [org.springframework.orm.hibernate3
> > > >  [EMAIL PROTECTED]; default rollback
> > =
> > > > true
> > > > [keymanager] DEBUG [main]
> > > > KeyMetadataFormController.processFormSubmission(256) |
> > > >  Data binding errors: 2
> > > > [keymanager] INFO [main]
> > > > KeyMetadataFormControllerTest.endTransaction (290) |
> > Rol
> > > > led back transaction after test execution
> > > > Tests run: 3, Failures: 2, Errors: 0, Skipped: 0, Time elapsed:
> 109.045
> > sec
> > > > <<<
> > > > FAILURE!
> > > > Running
> > > >
> >
> com.intuit.security.keymanager.webapp.controller.KeyMetadataControllerTest
> > > >
> > > > With the following config:
> > > >
> > > >          <field property="startDate" depends="required, date">
> > > >               <arg0 key="keyMetadata.startDate"/>
> > > >               <var>
> > > >                   <var-name>datePattern</var-name>
> > > >                   <var-value>MM/dd/yyyy</var-value>
> > > >               </var>
> > > >           </field>
> > > >           <field property="endDate" depends="required, date">
> > > >               <arg0 key=" keyMetadata.endDate"/>
> > > >               <var>
> > > >                   <var-name>datePattern</var-name>
> > > >                   <var-value>MM/dd/yyyy</var-value>
> > > >               </var>
> > > >           </field>
> > > >
> > > > The java.util.Dates are getting populated into the model object
> > correctly
> > > > but I am getting the error above.
> > > >
> > > > Does anyone know what I could be doing wrong.
> > > >
> > > > Thanks,
> > > > Abe
> > > >
> > > >
> > >
> > >
> > > --
> > > http://raibledesigns.com
> > >
> > >
> > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > >
> >
> >
>
>
> --
> http://raibledesigns.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to