I agree: - onblur vs. onform submit - option to validate via server-round trip (especially for onblur)
On 5/17/07, kranga <[EMAIL PROTECTED]> wrote:
We just introduced client side validation for Tapestry fields using an ajax call back to the server side (with Tapestry 3). So you only write Java code for the validation and the same code gets called from the client side. All parameters for controlling your validation are automatically sent back as part of the ajax call and you can define when the check is triggered (e.g. onBlur) and which one of the "error marker" components tied to the input field will show the errors. Makes the code very clean and the front-end experience is slick (e.g. registration page has the same validator to check if username is taken and this is fired from the client and from the server!). I'd suggest T5 move to such a design. ----- Original Message ----- From: "Bill Holloway" <[EMAIL PROTECTED]> To: "Tapestry users" <users@tapestry.apache.org> Sent: Wednesday, May 16, 2007 2:27 PM Subject: Re: T5: New Validators and server side validation > That's got it, Ben. Thanks. Wish I knew more about javascript > prototyping. Too much technology to stay familiar with. > > Bill > > On 5/16/07, Ben Sommerville <[EMAIL PROTECTED]> wrote: >> Bill, >> >> This >> > pageRenderSupport.addScript( >> > "Tapestry.Field.email('%s', %s);", >> > field.getClientId(), >> > quote(buildMessage(formatter, field))); >> >> does not construct a function validating emails. What it is doing is >> inserting >> a function call to register a particular field for validation. >> >> On the page sent to the client you would get something like >> >> <script language="javascript" type="text/javascript"> >> <!-- >> Tapestry.registerForm('MyFormId'); >> Tapestry.Field.email('MyFieldId','My message ')l >> --> >> </script> >> >> That is the source of your error message, the Tapestry.Field.email >> function >> does not exist but you are trying to call it. >> >> What you need to do is define the email validation function yourself in a >> javascript file. I would add it to a different namespace so that it is >> clear >> it is not a standard Tapestry function. >> >> e.g. in myproject-valdation.js >> >> var MyProject = {}; >> >> MyProject.Field = { >> >> email: function(field, message) { >> Tapestry.addValidator(field, false, function(value, event) { >> if( XXXXX ) { >> event.recordError(message) >> } >> }); >> } >> } >> >> where XXXX is the javascript to test if "value" is a valid email address. >> >> Add a script include to your border/page (to load your validation >> function) >> <script language="javascript" type="text/javascript" >> src="js/myproject-validation.js"></script> >> >> and change the render method to use MyProject.Field.email and you are >> good >> to go >> >> cheers. >> -- >> Ben Sommerville >> >> >> >> > -----Original Message----- >> > From: Bill Holloway [mailto:[EMAIL PROTECTED] >> > Sent: Wednesday, 16 May 2007 4:33 PM >> > To: Tapestry users >> > Subject: Re: T5: New Validators and server side validation >> > >> > In implementing an e-mail validator myself, one thing I notice in all >> > this is a Javascript error that reads >> > >> > Error: Tapestry.Field.email is not a function... >> > >> > I did some digging and found in org/apache/tapestry/tapestry.js the >> > building up of the Tapestry object has in it a section involving >> > "Collection of field based functions related to validation." In that >> > part of the object prototyping (I guess), each of the built-in >> > validation types (required, minlength, maxlength, min, and max) has a >> > function assigned that, essentially, duplicates the functionality of >> > the Java-based validators. All that prototyping must be for the >> > client-side functionality. >> > >> > So I'm wondering why my AppModule-provided EmailValidator class' >> > render() method isn't contributing the script. Its code is >> > >> > pageRenderSupport.addScript( >> > "Tapestry.Field.email('%s', %s);", >> > field.getClientId(), >> > quote(buildMessage(formatter, field))); >> > >> > Since I implementing something for render(), I would think that at >> > least some kind of function for Tapestry.Field.email would show up >> > (even if it has the wrong number of fields, etc), knocking out the >> > "...is not a function" error. >> > >> > Bill >> > >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > > -- > "The future is here. It's just not evenly distributed yet." > > -- Traditional > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Howard M. Lewis Ship TWD Consulting, Inc. Independent J2EE / Open-Source Java Consultant Creator and PMC Chair, Apache Tapestry Creator, Apache HiveMind Professional Tapestry training, mentoring, support and project work. http://howardlewisship.com