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


Steps

1.

javax.faces.convert.Converter

インタフェースを実装してコンバータクラスを作成します。 2.

getAsObject()



getAsString()

メソッドの両方をオーバーライドします。 3.固有のコンバータIDに

@ FacesConverter

アノテーションを割り当てます。 4.

f:converter

タグを使用して、カスタムコンバータクラスをJSFコンポーネントにリンクします。

カスタムコンバータの例

JSF 2のカスタムコンバータ名 “URLConverter”を作成するための詳細なガイド。StringをURL形式に変換する(前にHTTPプロトコルを追加する:))、オブジェクトに格納します。

1.フォルダ構造

この例のフォルダ構造。


jsf2-custom-converter-example-folder、title = "jsf2-custom-converter-example-folder"、幅= 322、高さ= 383

2.コンバータクラス

package com.mkyong;

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

次の2つの方法をオーバーライドします:

1。 getAsObject()

は、指定された文字列値をObjectに変換します。

2。 getAsString()

は、指定されたオブジェクトをStringに変換します。

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

       //...

    }

コンバータIDに

@ FacesConverter

アノテーションを割り当てます。

package com.mkyong;

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

フルカスタムコンバータのソースコードを見る:

  • URLConverter.java **

package com.mkyong;

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.mkyong.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.mkyong.URLConverter

“として与えられ、任意の指定されたString( “http”を先頭に追加)を ”

URLBookmark

“オブジェクトに変換します。

さらに、URLの検証に失敗した場合は、エラーメッセージが宣言された

FacesMessage

オブジェクトを返します。

  • URLBookmark.java **

package com.mkyong;

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.mkyong;

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 **

<?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:body>

        <h1>Custom converter in JSF 2.0</h1>

    <h:form>

      <h:panelGrid columns="3">

        Enter your bookmark URL :

        <h:inputText id="bookmarkURL" value="#{user.bookmarkURL}"
            size="20" required="true" label="Bookmark URL">
            <f:converter converterId="com.mkyong.URLConverter"/>
        </h:inputText>

        <h:message for="bookmarkURL" style="color:red"/>

      </h:panelGrid>

      <h:commandButton value="Submit" action="result"/>

    </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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      >
    <h:body>

        <h1>Custom converter in JSF 2.0</h1>

      <h:panelGrid columns="2">

        Bookmark URL :
        <h:outputText value="#{user.bookmarkURL}"/>

      </h:panelGrid>

    </h:body>
</html>

5.デモ

有効なURLを入力し、 “http”を付けないでください。


jsf2-custom-converter-example-1、title = "jsf2-custom-converter-example-1"、幅= 640、高さ= 299

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


jsf2-custom-converter-example-2、title = "jsf2-custom-converter-example-2"、幅= 640、高さ= 299

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


jsf2-custom-converter-example-3、title = "jsf2-custom-converter-example-3"、幅= 640、高さ= 299

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

ダウンロード – リンク://wp-content/uploads/2010/11/JSF-2-Custom-Converter-Example.zip[JSF-2-Custom-Converter-Example.zip](11KB)

リファレンス

doc – カスタムコンバータを作成する]

リンク://タグ/jsf2/[jsf2]