[Seasar-user:12375] Re: [Teeda]intフィールドに@NumberConverterを設定するとValidatorに渡る値がLongに変わる

丹野 [E-MAIL ADDRESS DELETED]
2008年 1月 4日 (金) 20:38:33 JST


丹野です。

小林様、ひが様
ご回答ありがとうございます。
返信が遅くなり申し訳ありません。

> 小林 (koichik) です.
>
> NumberConverter は JSF 標準のもので,
> Long または Double に変換することが
> 仕様で決められています.

> ひがです。
>
> Converterは、複数指定しても意味がないので、
> @IntegerConverterだけを指定するようにしてください。
>
> でも@IntegerConverterってpatternが
> 指定できないんですね。
>
> 将来的には、@IntegerConverterでpatternをサポートしたほうが
> いい気がしますが、とりあえず今のまま試すなら、
> ValidatorでIntegerに変換してください。

いろいろ試した結果、@NumberConverterを使うと以下のようになりました。
(仕様通りの動作ですが)

画面の入力値        => Validatorに渡るvalueのクラス
Integerで扱える範囲 => Long
Longで扱える範囲    => Long
Longで扱えない範囲  => Double

patternを指定したいので、Pageでは@NumberConverterを残し、
@LongRangeを追加することにしました。

public class XxxPage {
    @NumberConverter(pattern = "0000")
    @LongRange(minimum = 0, maximum = 9999)
    @MyXxx()
    private int arg1;
}

Validatorでは、valueがDoubleの場合と、
valueがLongでIntegerの範囲を超える場合に例外ではじいて、
上記に該当しない場合にintに変換するようにしました。

将来、@IntegerConverter、@ShortConverterなどで
patternをサポートしていただけるとありがたいです。

以上、よろしくお願いいたします。



Seasar-user メーリングリストの案内