Yes that does pose a problem, once again hitting the large JSF flaw of using required as a flag instead of as a validator. I don't see an adequate solution to that problem without using a custom component and overriding the validate function or using and action or actionListener to ensure that when one is given, both are given.
On 9/4/07, Suhel Rizvi <[EMAIL PROTECTED]> wrote: > > Thanks for the explanation of the code which shows why it doesnt work. > > However if I do take up your suggestion and put the validation on the second > field only then there is one use case where it is a particular problem; As > you may have noticed both my fields are not required fields - therefore the > user can submit a value for the first field only and the validation on the > second field will not execute and the form will be submitted without the two > fields being equal. > > If both fields were required fields then we would not have this problem but > the user requirements in this case are the fields are non mandatory but if > one of them is filled in then the other must match. > > So if I cant use this validator I need to find an alternative way to solve > this problem. > > >From: "Andrew Robinson" <[EMAIL PROTECTED]> > >Reply-To: "MyFaces Discussion" <users@myfaces.apache.org> > >To: "MyFaces Discussion" <users@myfaces.apache.org> > >Subject: Re: [Tomahawk] validateEqual problem for second field > >Date: Tue, 4 Sep 2007 11:12:44 -0600 > > > >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" <users@myfaces.apache.org> > > > >To: "MyFaces Discussion" <users@myfaces.apache.org> > > > >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 > > > > > > > > _________________________________________________________________ > The next generation of Hotmail is here! http://www.newhotmail.co.uk > >