Come eseguire la convalida in JSF, come creare un validatore personalizzato in JSF

Vorrei eseguire la convalida in alcuni dei miei componenti di input come utilizzando un metodo di bean Java. Dovrei usare o per questo? Dove posso leggere di più a riguardo?

Hai solo bisogno di implementare l’interfaccia del 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!")); } } } 

@FacesValidator lo registrerà in JSF con ID validatore myValidator modo che sia ansible fare riferimento ad esso nell’attributo validator di qualsiasi componente / come segue:

   

Puoi anche usare , che sarebbe l’unico modo se intendi colbind più validator sullo stesso componente:

     

Ogni volta che il validatore lancia un ValidatorException , il suo messaggio verrà visualizzato nel associato al campo di input.

È ansible utilizzare per fare riferimento a un’istanza del validatore concreto da qualche parte nello scope EL, che a sua volta può essere facilmente fornito come lambda:

     

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

Per ottenere un ulteriore passo avanti, è ansible utilizzare la convalida del bean JSR303. Questo convalida i campi in base alle annotazioni. Dal momento che sarà tutta una storia, ecco alcuni link per iniziare:

  • Hibernate Validator – Introduzione
  • Esercitazione su JSF 2.0 – Convalida di messa a punto

è utile solo se si intende disabilitare la convalida del bean JSR303. Quindi inserisci i componenti di input (o anche l’intero modulo) all’interno di .

Guarda anche:

  • JSF non supporta la convalida cross-field, esiste una soluzione alternativa?
  • Come eseguire la convalida JSF in actionListener o metodo di azione?