この記事では、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]