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]

Reply via email to