Type: New Feature
Affects Version/s: 5.0.15
Fix Version/s: 5.3
The trend in validation seems to be to annotate your domain object properties; the annotations are then used by validation frameworks to validate the domain objects (see JPA / Hibernate Validator / JSR 303 / AppFuse 2 / etc).
It'd be nice if Tapestry had a JpaValidator built in, which wouldn't be hard, except that the Validator interface doesn't provide enough information in the validate( ) method:
public void validate(IFormComponent field, ValidationMessages messages, Object value) throws ValidatorException
The options, as far as I can tell, would be:
1. The Validator level is the wrong level at which to read the annotations; read them higher up and assign multiple low-level validators (maxLength,required,maxValue,etc) at runtime. But where?
2. Provide the IBinding from which the value originated as an extra parameter in the validate( ) method, but let the validators check for whatever specific IBinding implementations they are interested in via instanceof.
3. Provide the IBinding from which the value originated as an extra parameter in the validate( ) method, and also enhance IBinding so that there is some standard way to access this sort of extra info without worrying about the specific binding type.