JSF - Validateur personnalisé

Nous pouvons créer notre propre validateur personnalisé dans JSF.

La définition d'un validateur personnalisé dans JSF est un processus en trois étapes.

Étape La description
1 Créez une classe de validation en implémentant l' interface javax.faces.validator .Validator.
2 Implémentez la méthode validate () de l'interface ci-dessus.
3 Utilisez Annotation @FacesValidator pour attribuer un ID unique au validateur personnalisé.

Étape 1: créer une classe de validation: UrlValidator.java

public class UrlValidator implements Validator {
...
}

Étape 2: implémentation des méthodes d'interface de validation: UrlValidator.java

public class UrlValidator implements Validator {
   
   @Override
   public void validate(FacesContext facesContext,
      UIComponent component, String value) throws ValidatorException {
      ...
   }
}

Étape 3: annoter pour enregistrer le validateur: UrlValidator.java

@FacesValidator("com.tutorialspoint.test.UrlValidator")
public class UrlValidator implements Validator {
}

Utiliser le validateur dans la page JSF

<h:inputText id="urlInput" value="#{userData.data}" label="URL" >
   <f:validator validatorId="com.tutorialspoint.test.UrlValidator" />
</h:inputText>

Exemple d'application

Créons une application JSF de test pour tester la balise ci-dessus.

Étape La description
1 Créez un projet avec un nom helloworld sous un package com.tutorialspoint.test comme expliqué dans le chapitre JSF - Première application .
2 Créez UrlValidator.java en tant que convertisseur sous le package com.tutorialspoint.test comme expliqué ci-dessous.
3 Créez UserData.java en tant que bean géré sous le package com.tutorialspoint.test comme expliqué ci-dessous.
4 Modifiez home.xhtml comme expliqué ci-dessous. Gardez le reste des fichiers inchangé.
5 Créez result.xhtml dans le répertoire webapps comme expliqué ci-dessous.
6 Compilez et exécutez l'application pour vous assurer que la logique métier fonctionne conformément aux exigences.
sept Enfin, créez l'application sous la forme d'un fichier war et déployez-la dans Apache Tomcat Webserver.
8 Lancez votre application Web en utilisant l'URL appropriée, comme expliqué ci-dessous à la dernière étape.

UrlValidator.java

package com.tutorialspoint.test;

import java.net.URI;
import java.net.URISyntaxException;

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.tutorialspoint.test.UrlValidator")
public class UrlValidator implements Validator {

   @Override
   public void validate(FacesContext facesContext,
      UIComponent component, Object value)
      throws ValidatorException {
      StringBuilder url = new StringBuilder();
      String urlValue = value.toString();

      if(!urlValue.startsWith("http://", 0)) {
         url.append("http://");
      }
      url.append(urlValue);

      try {
         new URI(url.toString());
      } catch (URISyntaxException e) {
         FacesMessage msg =
            new FacesMessage("URL validation failed","Invalid URL format");
         msg.setSeverity(FacesMessage.SEVERITY_ERROR);
         throw new ValidatorException(msg);
      }
   }
}

UserData.java

package com.tutorialspoint.test;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name = "userData", eager = true)
@SessionScoped
public class UserData implements Serializable {
   private static final long serialVersionUID = 1L;
   public String data;

   public String getData() {
      return data;
   }

   public void setData(String data) {
      this.data = data;
   }
}

home.xhtml

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:h = "http://java.sun.com/jsf/html"
   xmlns:f = "http://java.sun.com/jsf/core">
   
   <h:head>
      <title>JSF tutorial</title>
   </h:head>
   
   <h:body>
      <h2>Custom Validator Example</h2>
      
      <h:form>
         <h:inputText id = "urlInput" value = "#{userData.data}"
            label = "URL" >
            <f:validator validatorId = "com.tutorialspoint.test.UrlValidator" />
         </h:inputText>
         <h:commandButton value = "submit" action = "result"/>
         <h:message for = "urlInput" style = "color:red" />
      </h:form>
   
   </h:body>
</html>

result.xhtml

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml"
   xmlns:f = "http://java.sun.com/jsf/core"
   xmlns:h = "http://java.sun.com/jsf/html"
   xmlns:ui = "http://java.sun.com/jsf/facelets">
   
   <h:body>
      <h2>Result</h2>
      <hr />
      #{userData.data}
   </h:body>
</html>

Une fois que vous êtes prêt avec tous les changements effectués, laissez-nous compiler et exécuter l'application comme nous l'avons fait dans le chapitre JSF - Première application. Si tout va bien avec votre application, cela produira le résultat suivant.

Entrez une valeur non valide et appuyez sur le bouton Soumettre. Consultez le message d'erreur suivant.

Entrez une valeur valide et appuyez sur le bouton Soumettre. La suite sera la sortie.