JSF 2.0のカスタム変換

JSF 2.0のカスタムコンバーター

この記事では、JSF 2.0でカスタムコンバーターを作成する方法を示します。

Steps
1。 javax.faces.convert.Converterインターフェイスを実装してコンバータークラスを作成します。
2。 getAsObject()メソッドとgetAsString()メソッドの両方をオーバーライドします。
3。 @FacesConverterアノテーションを使用して一意のコンバーターIDを割り当てます。
4。 f:converterタグを介してカスタムコンバータークラスをJSFコンポーネントにリンクします。

カスタムコンバーターの例

JSF 2カスタムコンバーター名「URLConverter」を作成する詳細ガイド。これは、文字列をURL形式に変換し(前にHTTPプロトコルのみを追加します:))、オブジェクトに保存します。

1. フォルダー構造

この例のフォルダー構造。

jsf2-custom-converter-example-folder

2. コンバータクラス

javax.faces.convert.Converterインターフェースを実装して、カスタムコンバータークラスを作成します。

package com.example;

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

次の2つのメソッドをオーバーライドします:
1. getAsObject()、指定された文字列値をオブジェクトに変換します。
2. getAsString()、指定されたオブジェクトを文字列に変換します。

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

        //...

    }

@FacesConverterアノテーション付きのコンバーターIDを割り当てます。

package com.example;

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

完全なカスタムコンバーターのソースコードを参照してください。

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

    }
}

このカスタムコンバータークラスでは、コンバーターIDが「com.example.URLConverter」として指定され、指定された文字列を(前に「http」を追加して)「URLBookmark」オブジェクトに変換します。

さらに、URL検証が失敗した場合は、エラーメッセージが宣言されたFacesMessageオブジェクトを返します。

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

「user」という名前の通常のマネージドBean。ここでは特別なものはありません。

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ページ

f:converter」タグの「converterId」属性を介して、上記のカスタムコンバータをJSFコンポーネントにリンクします。

default.xhtml



    

        

Custom converter in JSF 2.0

Enter your bookmark URL :

result.xhtml



    

        

Custom converter in JSF 2.0

Bookmark URL :

5. Demo

「http」なしで有効なURLを入力してください。

jsf2-custom-converter-example-1

有効なURLの前に「http」を追加して表示します。

jsf2-custom-converter-example-2

無効なURLが指定された場合、宣言されたエラーメッセージを返します。

jsf2-custom-converter-example-3

ソースコードをダウンロード

ダウンロード–JSF-2-Custom-Converter-Example.zip(11KB)