Benutzerdefinierter Konverter in JSF 2.0

Benutzerdefinierter Konverter in JSF 2.0

In diesem Artikel zeigen wir Ihnen, wie Sie einen benutzerdefinierten Konverter in JSF 2.0 erstellen.

Steps
1. Erstellen Sie eine Konverterklasse, indem Sie die Schnittstelle vonjavax.faces.convert.Converterimplementieren.
2. Überschreiben Sie die MethodengetAsObject() undgetAsString().
3. Weisen Sie eine eindeutige Konverter-ID mit der Anmerkung@FacesConverterzu.
4. Verknüpfen Sie Ihre benutzerdefinierte Konverterklasse über das Tagf:convertermit der JSF-Komponente.

Beispiel für einen benutzerdefinierten Konverter

Eine detaillierte Anleitung zum Erstellen eines benutzerdefinierten JSF 2-Konverternamens „URLConverter“, mit dem ein String in ein URL-Format konvertiert (nur voranstehendes HTTP-Protokoll hinzufügen :) und in einem Objekt gespeichert wird.

1. Ordnerstruktur

Ordnerstruktur dieses Beispiels.

jsf2-custom-converter-example-folder

2. Konverterklasse

Erstellen Sie eine benutzerdefinierte Konverterklasse, indem Sie die Schnittstelle vonjavax.faces.convert.Converterimplementieren.

package com.example;

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

Überschreiben Sie die folgenden zwei Methoden:
1. getAsObject(), konvertiert den angegebenen Zeichenfolgenwert in ein Objekt.
2. getAsString() konvertiert das angegebene Objekt in eine Zeichenfolge.

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) {

        //...

    }

Weisen Sie eine Konverter-ID mit der Anmerkung@FacesConverterzu.

package com.example;

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

Vollständigen benutzerdefinierten Konverter-Quellcode anzeigen:

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();

    }
}

In dieser benutzerdefinierten Konverterklasse wird eine Konverter-ID als "com.example.URLConverter" angegeben und ein beliebiger String (durch Hinzufügen eines "http" vorne) in ein "URLBookmark" -Objekt konvertiert.

Wenn die URL-Überprüfung fehlschlägt, geben Sie außerdem einFacesMessage-Objekt mit der deklarierten Fehlermeldung zurück.

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. Managed Bean

Eine normale verwaltete Bean mit dem Namen "user", hier nichts Besonderes.

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. JSF Seite

Verknüpfen Sie den obigen benutzerdefinierten Konverter mit der JSF-Komponente über das Attribut "converterId" im Tag "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

Geben Sie eine gültige URL ohne "http" ein.

jsf2-custom-converter-example-1

Fügen Sie vor der gültigen URL ein "http" ein und zeigen Sie es an.

jsf2-custom-converter-example-2

Wenn eine ungültige URL angegeben wird, geben Sie die deklarierte Fehlermeldung zurück.

jsf2-custom-converter-example-3

Quellcode herunterladen

Laden Sie es herunter -JSF-2-Custom-Converter-Example.zip (11 KB)