Cómo realizar la validación en JSF, cómo crear un validador personalizado en JSF

Me gustaría realizar la validación en algunos de mis componentes de entrada, como utilizando algún método de Java Bean. ¿Debo usar o para esto? ¿Dónde puedo leer más al respecto?

Solo necesita implementar la interfaz de Validator .

 @FacesValidator("myValidator") public class MyValidator implements Validator { @Override public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { // ... if (valueIsInvalid) { throw new ValidatorException(new FacesMessage("Value is invalid!")); } } } 

El @FacesValidator lo registrará en JSF con el ID del validador myValidator para que pueda hacer referencia en el atributo del validator de cualquier / siguiente manera:

   

También puede usar , que sería la única manera si tiene la intención de adjuntar validador múltiple en el mismo componente:

     

Siempre que el validador arroje una ValidatorException , su mensaje se mostrará en el asociado con el campo de entrada.

Puede usar para hacer referencia a una instancia concreta de validador en algún lugar del scope de EL, que a su vez puede suministrarse fácilmente como un lambda:

     

 public Validator getValidator() { return (context, component, value) -> { // ... if (valueIsInvalid) { throw new ValidatorException(new FacesMessage("Value is invalid!")); } }; } 

Para ir un paso más allá, puede usar la validación de beans JSR303. Esto valida los campos basados ​​en anotaciones. Como va a ser toda una historia, aquí hay algunos enlaces para comenzar:

  • Validador de Hibernate – Primeros pasos
  • JSF 2.0 tutorial – Validación de ajuste

El solo es útil si tiene la intención de deshabilitar la validación del bean JSR303. A continuación, coloca los componentes de entrada (o incluso el formulario completo) dentro de .

Ver también:

  • JSF no es compatible con la validación de campo cruzado, ¿hay alguna solución?
  • ¿Cómo se realiza la validación de JSF en actionListener o método de acción?