[Seasar-user:15460] Re: [Teeda]TNumberLengthValidationについて

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 8月 22日 (金) 15:00:30 JST


小林 (koichik) です.

Date:    Fri, 22 Aug 2008 13:00:01 +0900
From:    "tomofumi ootsubo" <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:15458] [Teeda]TNumberLengthValidationについて

> チェック対象の変数の型がBigDecimal等の場合は、
> 数値以外の文字を入力した場合 →"×××" : 値(x)は適切な型に変換できません。
> 指定した桁数を超過した場合  →"×××"の整数部は1〜10桁でなくてはいけませ
> ん。
> と表示されますが、
> 
> チェック対象の変数の型がIntegerの場合は、
> 数値以外の文字を入力した場合 →"×××" : 値(x)は適切な型に変換できません。
> 指定した桁数を超過した場合  →"×××" : 値(x)は適切な型に変換できません。
> と、桁数超過による際でも、型についての矛盾を指しているようなメッセージが表示
> されてしまいます。

Integer で表現可能な範囲の値 (例えば 20 億)であれば,
Integer でも

> 指定した桁数を超過した場合  →"×××"の整数部は1〜10桁でなくてはいけませ

になります.
同じ 10 桁でも 30 億などは表現できないため,
その場合は

> 指定した桁数を超過した場合  →"×××" : 値(x)は適切な型に変換できません。

になります.

> Integer型をバリデーションした際のメッセージをBigDecimal等をバリデーションし
> た際のメッセージに合わせて頂けないでしょうか?

JSF 仕様で入力文字列は内部的な値 (この場合は
Integer) に変換してからバリデーションすることに
なっているので,

http://java.sun.com/javaee/5/docs/api/javax/faces/component/UIInput.html#validate(javax.faces.context.FacesContext)

Integer の範囲を超えている場合はバリデーションを
行う前に

> 指定した桁数を超過した場合  →"×××" : 値(x)は適切な型に変換できません。

になります.これを変更することはできません.

TLongConverter を指定すると,内部的な値が Long に
なるので,30 億などを入力されても

> 指定した桁数を超過した場合  →"×××"の整数部は1〜10桁でなくてはいけませ

になります.

@LongConverter
@NumberLength(integralMax=10)
public Integer number;


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



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