Convertisseur personnalisé dans JSF 2.0

Convertisseur personnalisé en JSF 2.0

Dans cet article, nous vous montrons comment créer un convertisseur personnalisé dans JSF 2.0.

Steps
1. Créez une classe de convertisseur en implémentant l'interfacejavax.faces.convert.Converter.
2. Remplacez les méthodesgetAsObject() etgetAsString().
3. Attribuez un ID de convertisseur unique avec l'annotation@FacesConverter.
4. Liez votre classe de convertisseur personnalisée au composant JSF via la balisef:converter.

Exemple de convertisseur personnalisé

Un guide détaillé pour créer un nom de convertisseur personnalisé JSF 2 «URLConverter», qui est utilisé pour convertir une chaîne au format URL (ajoutez le protocole HTTP en face seulement :)) et le stocker dans un objet.

1. Structure des dossiers

Structure des dossiers de cet exemple.

jsf2-custom-converter-example-folder

2. Classe de convertisseur

Créez une classe de convertisseur personnalisée en implémentant l'interfacejavax.faces.convert.Converter.

package com.example;

import javax.faces.convert.Converter;
public class URLConverter implements Converter{
    //...
}

Remplacez les deux méthodes suivantes:
1. getAsObject(), convertit la valeur de chaîne donnée en un objet.
2. getAsString(), convertit l'objet donné en chaîne.

public class URLConverter implements Converter{

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {

        //...
    }
    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {

        //...

    }

Attribuez un ID de convertisseur avec l'annotation@FacesConverter.

package com.example;

import javax.faces.convert.Converter;
@FacesConverter("com.example.URLConverter")
public class URLConverter implements Converter{
    //...
}

Voir le code source complet du convertisseur personnalisé:

URLConverter.java

package com.example;

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;
import org.apache.commons.validator.UrlValidator;

@FacesConverter("com.example.URLConverter")
public class URLConverter implements Converter{

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
        String value) {

        String HTTP = "http://";
        StringBuilder url = new StringBuilder();

        //if not start with http://, then add it
        if(!value.startsWith(HTTP, 0)){
            url.append(HTTP);
        }
        url.append(value);

        //use Apache common URL validator to validate URL
        UrlValidator urlValidator = new UrlValidator();
        //if URL is invalid
        if(!urlValidator.isValid(url.toString())){

            FacesMessage msg =
                new FacesMessage("URL Conversion error.",
                        "Invalid URL format.");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ConverterException(msg);
        }

        URLBookmark urlBookmark = new URLBookmark(url.toString());

        return urlBookmark;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {

        return value.toString();

    }
}

Dans cette classe de convertisseur personnalisée, il reçoit un identifiant de convertisseur en tant que «com.example.URLConverter» et convertit toute chaîne donnée (en ajoutant un «http» devant) en objet «URLBookmark».

De plus, si la validation d'URL échoue, retournez un objetFacesMessage avec un message d'erreur déclaré.

URLBookmark.java

package com.example;

public class URLBookmark{

    String fullURL;

    public URLBookmark(String fullURL) {
        this.fullURL = fullURL;
    }

    public String getFullURL() {
        return fullURL;
    }

    public void setFullURL(String fullURL) {
        this.fullURL = fullURL;
    }

    public String toString(){
        return fullURL;
    }

}

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 bookmarkURL;

    public String getBookmarkURL() {
        return bookmarkURL;
    }

    public void setBookmarkURL(String bookmarkURL) {
        this.bookmarkURL = bookmarkURL;
    }

}

4. Page JSF

Lien ci-dessus convertisseur personnalisé vers le composant JSF via l'attribut «converterId» dans la balise «f:converter».

default.xhtml




    

        

Custom converter in JSF 2.0

Enter your bookmark URL :

result.xhtml




    

        

Custom converter in JSF 2.0

Bookmark URL :

5. Demo

Saisissez une URL valide, sans «http».

jsf2-custom-converter-example-1

Ajoutez un «http» devant l'URL valide et affichez-le.

jsf2-custom-converter-example-2

Si une URL non valide est fournie, renvoyez le message d'erreur déclaré.

jsf2-custom-converter-example-3

Télécharger le code source

Téléchargez-le -JSF-2-Custom-Converter-Example.zip (11 Ko)