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

Nishiwaki Kiyoyuki [E-MAIL ADDRESS DELETED]
2006年 12月 25日 (月) 10:10:19 JST


西腋です。

> 現在、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
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: InvocationTargetException.zip
型:         application/x-zip-compressed
サイズ:     1408 バイト
説明:       無し
URL:        http://ml.seasar.org/archives/seasar-user/attachments/20061225/5bd2b9c9/attachment.bin 


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