忍者ブログ
[226] [225] [224] [223] [222] [221] [220] [219] [218] [217] [216]

DATE : 2017/06/29 (Thu)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/12/09 (Sat)

JSF には、ビュー(HTML のフォームなど)と モデルデータオブジェクト間で値を変換するために Converter を使用します。

例えば、javax.faces.convert .DateTimeConverterを使用すると、ユーザがビューに入力した文字列や選択した項目を java.util.Date オブジェクトに変換できます。また、逆にモデルデータオブジェクトの Date オブジェクトを持つプロパティから、ビューに表示する文字列に変換することもできます。

Converter は、javax.faces.convert.Converter を実装することで自作できます。本記事では、Converter を実装する際のポイントをメモしておきます。

Converter の行う変換は、ビューからモデルデータオブジェクトへ行うもの、モデルデータオブジェクトからビューへの変換を行うものの2種類があります。

変換 変換を行うメソッド
ビュー → モデルデータオブジェクト getAsObject
モデルデータオブジェクト → ビュー getAsString

Converter を実装する際には、引数なしのコンストラクタを用意する必要があります。

なお、必ずしも上の2つのメソッド全てをしっかり実装する必要はありません。行う変換が1種類のみであれば、片方は簡単な実装で済ませても構いません。

ただし、変換対象のオブジェクトとして、null が渡されることがあるので注意が必要です。例えば、モデルデータオブジェクトからビューへの変換では特に処理を行わない場合(例えば、モデルデータオブジェクトのプロパティが String などで変換の必要がない場合)、次のようなコードを書いてしまうことがあります。

public String getAsString(
        FacesContext context, UIComponent component, Object value) {
    if (context == null || component == null) {
        throw new NullPointerException();
    }

    return object.toString();
}

しかし、変換対象のモデルデータオブジェクトのプロパティが null だった場合、引数 value も null となるため NullPointerException が発生します。

value が null の場合、Converter#getAsString(FacesContext, UIComponent, Object) の仕様では長さ0の文字列を返すという仕様になっています。

そのため、特に処理を行わないメソッドは、次のように書く必要があります。

public String getAsString(
        FacesContext context, UIComponent component, Object value) {
    if (context == null || component == null) {
        throw new NullPointerException();
    }

    if (value == null) {
        return "";
    }

    return value.toString();
}
PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
05 2017/06 07
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
05 2017/06 07
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)