[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 メーリングリストの案内