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]