Thanks, Thiago, but it lacks AJAX. I'd like the validator to behave like any other client-side validator except that it asks the server to help, eg. to validate that a name has not already been used.
Geoff On 18/06/2010, at 12:24 PM, Thiago H. de Paula Figueiredo wrote: > On Thu, 17 Jun 2010 22:20:45 -0300, Geoff Callender > <geoff.callender.jumpst...@gmail.com> wrote: > >> Hi all, > > Hi! > > This is an example of a RGB string validator that I created for my Tapestry > courses (basic and advanced): > > public class RGBValidator extends AbstractValidator<Void, String> { > > final private static Pattern PATTERN = > Pattern.compile("[0-9A-Fa-f]{6}"); > > final private RenderSupport renderSupport; > > final private Asset javascript; > > public RGBValidator( > AssetSource assetSource, RenderSupport renderSupport) { > > super(null, String.class, "rgb-validation"); > this.renderSupport = renderSupport; > javascript = assetSource.getClasspathAsset( > > "br/com/arsmachina/cursotapestry/validacao/rgb.js"); > > } > > public void render(Field field, Void constraintValue, > MessageFormatter formatter, MarkupWriter writer, > FormSupport formSupport) { > > String message = buildMessage(field, formatter); > > // adds JavaScript validation > formSupport.addValidation(field, "rgb", message, null); > > // includes rgb.js in the page > renderSupport.addScriptLink(javascript); > > // adds a hint to the user. just an example of generating > // HTML inside a validator. > writer.element("span", "class", "hint"); > writer.write("Must be filled with 6 digits or letters from A to > F."); > writer.end(); > > } > > @Override > public void validate(Field field, Void constraintValue, > MessageFormatter formatter, String value) > throws ValidationException { > > if (PATTERN.matcher(value).matches() == false) { > String message = buildMessage(field, formatter); > throw new ValidationException(mensagem); > } > > } > > private String buildMesssage(Field field, MessageFormatter formatter) { > return formatter.format(field.getLabel()); > } > > } > > rgb.js: > > Tapestry.Validator.rgb = function(field, message) { > var regexp = /[0-9A-F]{6}/i; > field.addValidator(function(value) { > if (regexp.test(value) == false && value.length > 0) { > throw message; > } > }); > }; > > -- > Thiago H. de Paula Figueiredo > Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and > instructor > Owner, Ars Machina Tecnologia da Informação Ltda. > http://www.arsmachina.com.br > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org