Class level bean validation with f:valdiateWholeBean
JSF provides a f:validateBean which bridges Bean Validation to JSF, why we need another f:validateWholeBean?
This is explained in details in the VDL docs of f:validateWholeBean.
Support multi-field validation by enabling class-level bean validation on CDI based backing beans. This feature causes a temporary copy of the bean referenced by the value attribute, for the sole purpose of populating the bean with field values already validated by and then performing class-level validation on the copy. Regardless of the result of the class-level validation, the copy is discarded.
in another word, it provides the capability of cross fields validation.
A good example is password matching check in a signup page, we have to make sure the values in password field and password confirm field are equivalent.
Create a bean validation annotation @Password.
@Constraint(validatedBy=PasswordValidator.class)@Target(TYPE)@Retention(RUNTIME)@interfacePassword {Stringmessage()default"Password fields must match";Class[] groups()default {};Class[] payload()default {};}
Constraint declares which validator will handle this annotation, here it is PasswordValidator.