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. フォルダー構造
この例のフォルダー構造。

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を入力してください。

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

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

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