Re: Bean Validator Question

2006-10-06 Thread andyhot
Try moving the validation logic to the second component...

I don't think rdg1Max has rewinded (and given a chance to update its value)
when rdg's validator kicks in.


Julian Wood wrote:
 Hmm, so am I off in left field here? Is it not possible to validate
 the contents of one field based on the contents of another,
 server-side? Is there a bug?

 Thanks,

 J

 On 1-Oct-06, at 8:31 PM, Julian Wood wrote:

 I'm using a bean for validation. In particular, I want to make sure
 that one field is lte another (think exam scores 6 out of 12). So I
 have a bean set up like this:

 bean name=maxOne lifecycle=none
 class=ca.ucalgary.commons.mt3.controller.MaxNullValidator
 set name=max value=ognl:record.rdg1Max/
 /bean

 And components like this:

 component id=rdg1 type=TextField
 binding name=value value=ognl:record.rdg1/
 binding name=translator value=translator:number/
 binding name=displayName value=literal:rdg1/
 binding name=validators value=beans.maxOne/
 /component

 component id=rdg1Max type=TextField
 binding name=value value=ognl:record.rdg1Max/
 binding name=translator value=translator:number/
 binding name=displayName value=literal:rdg1 Max/
 /component

 Template is like this:

 input jwcid=rdg1 class=score/
 out of
 input jwcid=rdg1Max class=score/

 Now ignoring the actual validation, which is simple, when I render
 this page, max is null as indicated by logging from the setter in
 maxOne, as expected. When I submit, however, it is still null. When
 the page comes back (after failing validation), the max is now set
 properly, and simply pressing submit again will succeed.

 The curious thing is if I do the same thing using Date, the date will
 be null on pageRender, but will take the value of the date on submit.

 With String, I have had it go both ways, so I have been bashing my
 head against the wall trying to figure out what the difference is, to
 no avail. I know I must be missing something. I've been playing with
 different object types and translators, but it all just confuses the
 issue.

 How do I make sure the setter for a bean validator is called properly
 (for an Integer) before the validate method on the validator is
 called? ie How do I ensure the behaviour seen for Date also works for
 an Integer?

 Thanks,

 J

 PS. I also know this would be easy using js, by overriding
 renderContribution, but we need server-side too.

 -- 
 Julian Wood [EMAIL PROTECTED]

 Software Engineer
 Teaching  Learning Centre
 University of Calgary

 http://tlc.ucalgary.ca





-- 
Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr
Tapestry / Tacos developer
Open Source / J2EE Consulting 


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Bean Validator Question

2006-10-01 Thread Julian Wood
I'm using a bean for validation. In particular, I want to make sure  
that one field is lte another (think exam scores 6 out of 12). So I  
have a bean set up like this:


bean name=maxOne lifecycle=none  
class=ca.ucalgary.commons.mt3.controller.MaxNullValidator

set name=max value=ognl:record.rdg1Max/
/bean

And components like this:

component id=rdg1 type=TextField
binding name=value value=ognl:record.rdg1/
binding name=translator value=translator:number/
binding name=displayName value=literal:rdg1/
binding name=validators value=beans.maxOne/
/component

component id=rdg1Max type=TextField
binding name=value value=ognl:record.rdg1Max/
binding name=translator value=translator:number/
binding name=displayName value=literal:rdg1 Max/
/component

Template is like this:

input jwcid=rdg1 class=score/
out of
input jwcid=rdg1Max class=score/

Now ignoring the actual validation, which is simple, when I render  
this page, max is null as indicated by logging from the setter in  
maxOne, as expected. When I submit, however, it is still null. When  
the page comes back (after failing validation), the max is now set  
properly, and simply pressing submit again will succeed.


The curious thing is if I do the same thing using Date, the date will  
be null on pageRender, but will take the value of the date on submit.


With String, I have had it go both ways, so I have been bashing my  
head against the wall trying to figure out what the difference is, to  
no avail. I know I must be missing something. I've been playing with  
different object types and translators, but it all just confuses the  
issue.


How do I make sure the setter for a bean validator is called properly  
(for an Integer) before the validate method on the validator is  
called? ie How do I ensure the behaviour seen for Date also works for  
an Integer?


Thanks,

J

PS. I also know this would be easy using js, by overriding  
renderContribution, but we need server-side too.






--
Julian Wood [EMAIL PROTECTED]

Software Engineer
Teaching  Learning Centre
University of Calgary

http://tlc.ucalgary.ca