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