[Seasar-user:5618] Re: [S2Struts] プリミティブ等のプロパティを含むDTOの検証の動作について

Katsuhiko Nagashima [E-MAIL ADDRESS DELETED]
2006年 12月 27日 (水) 01:10:21 JST


永島です。

> DTOに java.sql.Date (java.util.Date では無いです。DBからのデータを出力用に記
> 述したものです)
> のプロパティがある場合、この型検証の自動付加によって java.sql.Date の hours
> プロパティなどにinteger の検証が付加されます。
> しかし、J2SE 1.4 などのJavaDocを見ると、java.sql.Date#getHours() を呼ぶと
> IllegalArgumentException が発生するととなっており、
> 最終的には org.apache.commons.validator.util.ValidatorUtils で
> java.lang.reflect.InvocationTargetException が発生したとダンプされます。

java.sql.Dateの各メソッドに対して自動的に型検証を付加しないように修正しました。

ご指摘ありがとうございます。


06/12/25 に Nishiwaki Kiyoyuki<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 西腋です。
>
> > 現在、DTOの各プロパティに値を入れる前に検証を行う機能は提供しておりませ
> ん。
> > 一時提供する予定(していた)でしたが、少し問題があったので廃止しました。
> > ですので、ご指摘の通り型検証の自動付加は有効に利用することはできないかもし
> れません。。。
>
> 了解です。
> 画面から入力用のプロパティは基本的に String にしてアノテーションを記述して検
> 証するようにします。
> ありがとうございました。
>
>
>
> あと、
> この記事を検索等で引っ掛けた人向けの情報として
>
> DTOに java.sql.Date (java.util.Date では無いです。DBからのデータを出力用に記
> 述したものです)
> のプロパティがある場合、この型検証の自動付加によって java.sql.Date の hours
> プロパティなどにinteger の検証が付加されます。
> しかし、J2SE 1.4 などのJavaDocを見ると、java.sql.Date#getHours() を呼ぶと
> IllegalArgumentException が発生するととなっており、
> 最終的には org.apache.commons.validator.util.ValidatorUtils で
> java.lang.reflect.InvocationTargetException が発生したとダンプされます。
>
> ただ、
> java.sql.Date が java.util.Date の派生なので、DTOのプロパティは
> java.util.Date にすることで正常に動作するので
> いまのところ問題なく使用できています。
>
>
> > -----Original Message-----
> > From: [E-MAIL ADDRESS DELETED]
> > [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of
> > Katsuhiko Nagashima
> > Sent: Friday, December 22, 2006 10:34 PM
> > To: [E-MAIL ADDRESS DELETED]
> > Subject: [Seasar-user:5598] Re:[S2Struts]
> > プリミティブ等のプロパティを含むDTOの検証の動作について
> >
> > 永島です。
> >
> > > この機能は、画面からの入力値を検証する以外のための機能なのでしょうか?
> > > それとも、DTOの各プロパティに値を入れる前に検証を行うための設定などがあ
> るの
> > > でしょうか?
> >
> > 現在、DTOの各プロパティに値を入れる前に検証を行う機能は提供しておりませ
> ん。
> > 一時提供する予定(していた)でしたが、少し問題があったので廃止しました。
> > ですので、ご指摘の通り型検証の自動付加は有効に利用することはできないかもし
> れません。。。
> >
> > 以上です。
> >
> > 06/12/21 に Nishiwaki
> > Kiyoyuki<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > > 西腋と申します。
> > > 立続けで申し訳ありません。
> > >
> > > S2Struts 1.2.7 を使用して入力値の検証(strutsとcommons-validatorで)を
> 行って
> > > いるのですが
> > > DTOに以下のプリミティブ・クラスのプロパティが宣言されていると
> > > 自動的にそれぞれのプロパティに検証(validator-rules.xml に宣言されている
> byte
> > > 等々)が付加されます。
> > > byte、double、float、int、long、short
> > > Byte、Double、Float、Integer、Long、Short
> > > java.util.Date、java.sql.Timestamp
> > >
> > > ソースを見ますと、
> > >
> > org.seasar.struts.validator.factory.AbstractValidatorAnnotationHandler
> > > #getAu
> > > toTypeValidatorName(PropertyDesc)
> > > にて、特定のプリミティブとクラスに対して、特定の検証
> (validator-rules.xml に
> > > 宣言されている検証パターン)を付加しており、
> > > DTOが検証対象になっている場合、上記のプリミティブ・クラスのプロパティに
> も自
> > > 動的に検証が行われています。
> > >
> > > ここで、一つ確認させていただきたいのですが、
> > > 実際に検証を行う org.apache.struts.validator.FieldChecks のメソッドが実
> 行さ
> > > れる際には
> > > 第一引数にわたってくるDTO(S2Strutsの場合、SerializeBeanValidatorFormで
> ラッ
> > > プされているようですが)には
> > > すで値が設定されているため、上記のプリミティブ・クラスのプロパティに対し
> ても
> > > 値がすでに格納されています。
> > > この際、画面で入力された文字列が各プリミティブ・クラスに変換できない場
> 合、デ
> > > フォルト値での初期化や、例外の発生となるため
> > > 自動的に付加されている検証が有意義に使用できません。
> > >
> > > この機能は、画面からの入力値を検証する以外のための機能なのでしょうか?
> > > それとも、DTOの各プロパティに値を入れる前に検証を行うための設定などがあ
> るの
> > > でしょうか?
> > >
> > > よろしくお願いいたします。
> > >
> > >
> > > 添付していますプロジェクトは
> > > DTOにStringとbyteのプロパティがあり、
> > > Stringのプロパティには、アノテーションでbyteの検証、
> > > byteのプロパティには、上記の機能で検証がかかるようになっているサンプルで
> す。
> > > S2Struts 1.2.7 の配布パッケージのJARを追加したら動くと思います。
> > >
> > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> > >
> > >
> > >
> > >
> >
> >
> > --
> > Katsuhiko Nagashima
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
>
>


-- 
Katsuhiko Nagashima



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