I'm pretty sure that I wrote the compareToValidator so that it will
work on either component, unlike the equalsValidator.   However, I
doubt many people have used it as a validator for the first component
listed (I know that I don't use it this way), so there might be a
minor bug to fix.


On 9/4/07, Andrew Robinson <[EMAIL PROTECTED]> wrote:
> I took a look into the code to make sure I knew what was going on and
> here is what I found:
>
> It looks like the problem you are having is due to the design of the
> ValidateEqual class. It is performing its logic in the validation
> phase using the EditableValueHolder.getValue() function. This presents
> a problem on the first component. Reason as follows:
>
> "equal" has an EqualValidator added to it during the view creation
> "equal2" has an EqualValidator added to it during the view creation
>
> during the decode phase, equal and equal2 are decoded and the values
> from the client are stored in the submittedValue property of each
> component.
>
> during the validation phase:
>
> The "equal" component's processValidators method calls the validate
> function. This function converts the submitted value. If there are no
> problems, the validation of the component is called (validateValue
> function). If the component is valid, the local value (setValue) is
> called.
>
> So, at the time that the "equal" is validating, equal2 has not set its
> local value (it is currently null, only the submitted value is set)
> and the submitted value is not converted.
>
> So, equal cannot compare it's local value to equal2's local value
> since equal2 is not yet validated.
>
> This means that in order for the validate compare to and validate
> equal components to work, they have to be on the second component as
> the first component has to be already be validate, and be valid!
> Otherwise, the local value is not set, which is what these validators
> use to validate against.
>
> So the short answer to your question is your use case is not
> supported. The validators *have* to be only on the 2nd component.
>
> -Andrew
>
>
> On 9/4/07, Suhel Rizvi <[EMAIL PROTECTED]> wrote:
> >
> > I agree with you but unfortunately the customer for whom I'm developing the
> > software doesn't, but additionally the problem in itself is something we
> > should be able to solve relatively simply I would have thought as it may be
> > a valid scenario in other software projects.
> >
> > >From: "Andrew Robinson" <[EMAIL PROTECTED]>
> > >Reply-To: "MyFaces Discussion" <[email protected]>
> > >To: "MyFaces Discussion" <[email protected]>
> > >Subject: Re: [Tomahawk] validateEqual problem for second field
> > >Date: Tue, 4 Sep 2007 10:41:39 -0600
> > >
> > >Not a solution but a question,
> > >
> > >why have the validate equal on both components, it should only be
> > >necessary to put it on one of the components (like the 2nd one). The
> > >user shouldn't need two messages telling them they screwed up, one
> > >should be necessary :-)
> > >
> > >-Andrew
> > >
> > >On 9/4/07, Suhel Rizvi <[EMAIL PROTECTED]> wrote:
> > > >
> > > > I am using the tomahawk validateEqual tag to check if two (non
> > >mandatory)
> > > > fields on a form are equal to each other but hitting some problems
> > >related
> > > > to the order of the field validations.
> > > >
> > > > In the example below the validation and error message attached to the
> > >second
> > > > field works fine. However for the validation on the first field it seems
> > >I
> > > > have to submit the form the fields are in twice if the fields are equal
> > >-
> > > > the first time it always displays the error message saying they are
> > >unequal
> > > > but seems to realize they are equal on second submit.
> > > >
> > > > <h:inputText id="equal"
> > > >                 value="#{validateForm.equal}"
> > > >                 required="false">
> > > >     <t:validateEqual for="equa2l" />
> > > > </h:inputText>
> > > > <h:inputText id="equal2"
> > > >                 value="#{validateForm.equal2}"
> > > >                 required="false">
> > > >     <t:validateEqual for="equal" />
> > > > </h:inputText>
> > > >
> > > > Does anyone know why this is happening or have a solution ?
> > > >
> > > > [I have also tried the sandbox validateCompareTo tag as an alternative
> > >with
> > > > similar results.]
> > > >
> > > > _________________________________________________________________
> > > > Get Pimped! FREE emoticon packs from Windows Live -
> > > > http://www.pimpmylive.co.uk
> > > >
> > > >
> >
> > _________________________________________________________________
> > Get Pimped! FREE emoticon packs from Windows Live -
> > http://www.pimpmylive.co.uk
> >
> >
>

Reply via email to