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.

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».

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

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

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