Validateur personnalisé dans JSF 2.0
Dans cet article, nous allons vous montrer comment créer un validateur personnalisé dans JSF 2.0
Pas
-
Créez une classe de validateur en implémentant l'interface
javax.faces.validator.Validator. -
Remplacez la méthode
validate(). -
Attribuez un ID de validateur unique via l'annotation
@FacesValidator. -
Référencez la classe de validation personnalisée au composant JSF via la balise
f:validator.
Un guide détaillé pour créer un nom de validateur personnalisé "EmailValidator" - pour valider l'adresse e-mail via l'expression régulière Java.
1. Structure des dossiers
Structure de répertoire de ce projet.

2. Classe de validateur
Créez une classe de validateur personnalisée et implémentez l'interfacejavax.faces.validator.Validator.
package com.example;
import javax.faces.validator.Validator;
public class EmailValidator implements Validator{
//...
}
Remplace la méthodevalidate().
public class EmailValidator implements Validator{
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
//...
}
}
Attribuez un ID de validateur unique avec@FacesValidator.
package com.example;
import javax.faces.validator.Validator;
@FacesValidator("com.example.EmailValidator")
public class EmailValidator implements Validator{
//...
}
Voir une classe de validateur personnalisée complète:
EmailValidator.java
package com.example;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
@FacesValidator("com.example.EmailValidator")
public class EmailValidator implements Validator{
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\." +
"[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*" +
"(\\.[A-Za-z]{2,})$";
private Pattern pattern;
private Matcher matcher;
public EmailValidator(){
pattern = Pattern.compile(EMAIL_PATTERN);
}
@Override
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
matcher = pattern.matcher(value.toString());
if(!matcher.matches()){
FacesMessage msg =
new FacesMessage("E-mail validation failed.",
"Invalid E-mail format.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
Ci-dessus se trouve une classe de validateur personnalisée, avec l'idcom.example.EmailValidator. Si l'e-mail n'est pas valide, renvoie le message d'erreurFacesMessage.
Note
Pour obtenir des explications détaillées sur le modèle d'expression régulière d'e-mail, veuillez vous référer à ce «http://www.example.com/regular-expressions/how-to-validate-email-address-with -regulier-expression / [Valider l'e-mail avec l'expression régulière Java] ».
3. Bean géré
Un bean géré normal nommé «utilisateur», rien de spécial ici.
package com.example;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean(name="user")
@SessionScoped
public class UserBean implements Serializable{
String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
4. Page JSF
Référence ci-dessus du validateur personnalisé au composant JSF via l'attribut «validatorId» dans la balisef:validator.
Spring DI dans le validateur personnalisé JSF
Si vous avez besoin de@Autowired dans le validateur personnalisé JSF, utilisebinding au lieu devalidatorId. Lisez cet article -Spring @Autowired into JSF custom validator.
default.xhtml
Custom validator in JSF 2.0
Enter your email :
result.xhtml
Custom validator in JSF 2.0
Email Address :
5. Demo
Valide l'adresse e-mail via un validateur personnalisé, si l'adresse e-mail n'est pas valide, renvoyez un message d'erreur.

Télécharger le code source
Téléchargez-le -JSF-2-Custom-Validator-Example (10 Ko)