JSF Converter入門 - カスタムConverterの実装

2009/06/23 21:22Update
TAGS: JSF | Converter | コンバータ | コンバート | 変換 | 入力 | 出力

JSFでは、標準Converterのほか、カスタムConverterも実装できます。本文はカスタムConverterの実装方法や手順について解説します。

Page:  <1|2|3|4|5>
JSFでは、コンバータ(converter)という ユーザ入力/出力 値に対してコンバート(変換)を行うための仕組みを提供しています。

JSF Converterの基本について、次の記事をご参照ください。

JSF Converter入門 - 標準Converter及びその使い方

カスタムConverter実装手順


1)カスタムConverterコンポーネント・クラス
2)faces-config.xmlに登録
3)カスタムConverterタグ・クラス
4)TLDファイル記述
5)カスタムConverterタグの使用

以下のサンプルは、次の機能のConverterを実装しています。
1、ユーザ入力:半角カンマ(,)区切りでユーザ入力をList型に変換します。
  例:"12,345,67,abc" という入力をList[0]=12,List[1]=345,List[2]=67,List[3]=abs に変換します。
2、出力(画面表示):List<String>型の値を半角カンマ(,)区切りでString形式に表示します。
  例:List[0]=12,List[1]=345,List[2]=67,List[3]=abs型のListを"12,345,67,abc"のように表示させます。

では、実装手順を見てみます。

1)カスタムConverterコンポーネント・クラス


javax.faces.Converter.Converterインタフェースを実装したクラスを定義します。

例:
String2ListConverter.java
package mypackage;

import java.util.ArrayList;
import java.util.List;

import javax.faces.convert.Converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

public class String2ListConverter implements Converter{
    //Converter ID
    public static final String CONVERTER_ID = "String2List";

    //String型⇒Object型
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if(value == null || value.equals("")){
            return value;
        }

        String [] items = value.split(",");
        List retList = new ArrayList();
        for (String item : items) {
            if (!"".equals(item)) {
                retList.add(item);
            }
        }
        
        return retList;
    }
    
    //Object型⇒String型
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        assert value instanceof List;
        
        String ret = "";
        List <String>valueList = (List)value;
        for (int i=0; i<valueList.size(); i++) {
            String item = (String)valueList.get(i);
            ret += item;
            
            if (i != valueList.size()-1) {
                ret += ",";
            }
        }
        return ret;
    }
    
    // parameters here
    private String param1;
    public void setParam1(String param1) {
        this.param1 = param1;
    }

    public String getParam1() {
        return param1;
    }
    //...
}


※変換エラーがあった場合、getAsObject/getAsStringメソッドでConverterExceptionを投げ出せば、JSFフレームワークはその異常をキャッチし、画面上で表示します。

Page:  <1|2|3|4|5>

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments