JSF 2.0のカスタム変換
この記事では、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.フォルダ構造
この例のフォルダ構造。
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”を付けないでください。
有効なURLの前に「http」を追加して表示します。
無効なURLが指定された場合は、宣言されたエラーメッセージを返します。
ソースコードをダウンロードする
ダウンロード – リンク://wp-content/uploads/2010/11/JSF-2-Custom-Converter-Example.zip[JSF-2-Custom-Converter-Example.zip](11KB)
リファレンス
doc – カスタムコンバータを作成する]
リンク://タグ/jsf2/[jsf2]