JSF - Convertisseur personnalisé

Nous pouvons créer notre propre convertisseur personnalisé en JSF.

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

Étape La description
1 Créez une classe de convertisseur en implémentant l' interface javax.faces.convert.Converter .
2 Implémentez les méthodes getAsObject () et getAsString () de l'interface ci-dessus.
3 Utilisez Annotation @FacesConvertor pour attribuer un identifiant unique au convertisseur personnalisé.

Étape 1: Créez une classe de convertisseur: UrlConverter.java

public class UrlConverter implements Converter {
...
}

Étape 2: Implémentation des méthodes d'interface du convertisseur: UrlConverter.java

Créez une classe simple pour stocker des données: UrlData. Cette classe stockera une chaîne d'URL.

public class UrlData {
   private String url;

   public UrlData(String url) {
      this.url = url;
   }
   ...
}

Utilisez UrlData dans la méthode getAsObject.

public class UrlConverter implements Converter {
   
   @Override
   public Object getAsObject(FacesContext facesContext,
      UIComponent component, String value) {
      ...
      UrlData urlData = new UrlData(url.toString()); 
      return urlData;
   }

   @Override
   public String getAsString(FacesContext facesContext, 
      UIComponent component, Object value) {
      return value.toString();
   }
}

Étape 3: annoter pour enregistrer le convertisseur: UrlConverter.java

@FacesConverter("com.tutorialspoint.test.UrlConverter")
public class UrlConverter implements Converter {
}

Utiliser le convertisseur dans la page JSF

<h:inputText id = "urlInput" value = "#{userData.data}" label = "URL" >
   <f:converter converterId = "com.tutorialspoint.test.UrlConverter" />
</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 UrlData.java sous le package com.tutorialspoint.test comme expliqué ci-dessous.
3 Créez UrlConvertor.java en tant que convertisseur sous le package com.tutorialspoint.test comme expliqué ci-dessous.
4 Créez UserData.java en tant que bean géré sous le package com.tutorialspoint.test comme expliqué ci-dessous.
5 Modifiez home.xhtml comme expliqué ci-dessous. Gardez le reste des fichiers inchangé.
6 Créez result.xhtml dans le répertoire webapps comme expliqué ci-dessous.
sept Compilez et exécutez l'application pour vous assurer que la logique métier fonctionne conformément aux exigences.
8 Enfin, créez l'application sous la forme d'un fichier war et déployez-la dans Apache Tomcat Webserver.
9 Lancez votre application Web en utilisant l'URL appropriée, comme expliqué ci-dessous à la dernière étape.

UrlData.java

package com.tutorialspoint.test;

public class UrlData {
   private String url;
   
   public UrlData(String url) {
      this.url = url;
   }
   
   public String getUrl() {
      return url;
   }

   public void setUrl(String url) {
      this.url = url;
   }
   
   public String toString() {
      return url;
   }
}

UrlConvertor.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.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

@FacesConverter("com.tutorialspoint.test.UrlConverter")
public class UrlConverter implements Converter {

   @Override
   public Object getAsObject(FacesContext facesContext, 
      UIComponent component, String value) {
      StringBuilder url = new StringBuilder();

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

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

      UrlData urlData = new UrlData(url.toString()); 
      return urlData;
   }

   @Override
   public String getAsString(FacesContext facesContext,
      UIComponent component, Object value) {
         return value.toString();
   }
}

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 UrlData data;

   public UrlData getData() {
      return data;
   }

   public void setData(UrlData 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 Converter Example</h2>
      
      <h:form>
         <h:inputText id = "urlInput" value = "#{userData.data}" 
            label = "URL" >
            <f:converter converterId = "com.tutorialspoint.test.UrlConverter" />
         </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. Voir le résultat suivant.