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 On 5/16/07, Juan Maya <[EMAIL PROTECTED]> wrote:
Hi Marcus. Here are the classes: Email.java package com.dodo.community.web.validators; import static org.apache.tapestry.TapestryUtils.quote; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.apache.tapestry.Field; import org.apache.tapestry.MarkupWriter; import org.apache.tapestry.PageRenderSupport; import org.apache.tapestry.ValidationException; import org.apache.tapestry.Validator; import org.apache.tapestry.ioc.MessageFormatter; /** * A validator that enforces that the value is a valid email. This validator is not configurable. */ public class Email implements Validator<Void, Object> { public static final String NAME = "email"; private static final String MESSAGE_KEY = "invalid"; private static final Pattern EMAIL_PATTERN = Pattern.compile ("[EMAIL PROTECTED]"); /* (non-Javadoc) * @see org.apache.tapestry.Validator#getConstraintType() */ public Class getConstraintType() { return String.class; } /* (non-Javadoc) * @see org.apache.tapestry.Validator#getMessageKey() */ public String getMessageKey() { return MESSAGE_KEY; } /* (non-Javadoc) * @see org.apache.tapestry.Validator#getValueType() */ public Class getValueType() { return String.class; } /* (non-Javadoc) * @see org.apache.tapestry.Validator#invokeIfBlank() */ public boolean invokeIfBlank() { return true; } /* (non-Javadoc) * @see org.apache.tapestry.Validator#render(org.apache.tapestry.Field, java.lang.Object, org.apache.tapestry.ioc.MessageFormatter, org.apache.tapestry.MarkupWriter, org.apache.tapestry.PageRenderSupport) */ public void render(Field field, Void constraintValue, MessageFormatter formatter, MarkupWriter writer, PageRenderSupport pageRenderSupport) { //TODO: add JS support } /* (non-Javadoc) * @see org.apache.tapestry.Validator#validate(org.apache.tapestry.Field, java.lang.Object, org.apache.tapestry.ioc.MessageFormatter, java.lang.Object ) */ public void validate(Field field, Void constraintValue, MessageFormatter formatter, Object value) throws ValidationException { System.out.println("validate email"); if (value == null || StringUtils.isBlank(value.toString())) throw new ValidationException(buildMessage(formatter, field)); if (!EMAIL_PATTERN.matcher(value.toString()).matches()) throw new ValidationException(buildMessage(formatter, field)); } /** * Builds a localized message * @param formatter * @param field * @return * @author juanm */ private String buildMessage(MessageFormatter formatter, Field field) { return formatter.format(field.getLabel()); } } add in AppModule.java public static void contributeFieldValidatorSource(MappedConfiguration<String, Validator> configuration){ configuration.add(Email.NAME, new Email()); } The validators work for me perfectly when i use them in a page but when i use them in a Component the server side validation only works in the second form. I would really appreciate if u can test to use the validators inside a component. On 5/15/07, Marcus <[EMAIL PROTECTED]> wrote: > > Juan, > > I'm trying, but having a lot of compilation errors. > If you post all code added to AppModule.java and Email class, maybe i can > help you. > > Marcus >
-- "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]