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

Nishiwaki Kiyoyuki [E-MAIL ADDRESS DELETED]
2007年 2月 14日 (水) 09:18:50 JST


西腋です。

> propDesc.hasReadMethod()
> の値も使用して判断するように修正しコミットしました。

早速の対応、ありがとうございます。



> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED]
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of
> Katsuhiko Nagashima
> Sent: Tuesday, February 13, 2007 11:57 PM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:6150] Re:[S2Struts]
> プリミティブ等のプロパティを含むDTOの検証の動作について
>
> 永島です。
>
> ご指摘と修正案ありがとうございます。
>
> propDesc.hasReadMethod()
> の値も使用して判断するように修正しコミットしました。
>
> お手数をお掛けしました。
> 以上です。
>
> 07/02/09 に Nishiwaki
> Kiyoyuki<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > 永島さま。
> >
> > 西腋と申します。
> > 少々古いスレッドですが、関連したことですので過去のメールの続きで書かせて
いた
> > だきます。
> >
> > 以前、検証対象になっているDTOに java.sql.Date が入っている場合
> > 例外が発生しましたので対応していただいたのですが、
> > 同じような現象が、java.math.BigDecimal でも起こってしまいました。
> >
> > デバッグして確認したところ
> > 根本の原因としては、BigDecimal にはsetScaleメソッドが存在するのですが
> > getScaleメソッドが存在しないため、実際に検証しようとしたときに
> > getScaleメソッドが見つからないと例外を起こしていました。
> >
> >
> org.seasar.struts.validator.factory.AbstractValidatorAnnotationHandler
> > の registerFields(Form, Field, BeanDesc) には
> > hasMethodForValidationメソッドを使用して、指定のプロパティが検証対象であ
るか
> > 否かを
> > 判断しているところがあります。
> > そこで、
> > hasMethodForValidationメソッドでの判断で、今のところ
> > propDesc.hasWriteMethod()
> > の値のみで判断していますので、
> > propDesc.hasReadMethod()
> > の値も使用して判断してみては、と思うのですが、いかがでしょうか。
> >
> >
> > 実際のところ、検証のアノテーションに noValidate をつけて検証が追加される
のを
> > 回避しているので、問題にはなっていないのですが。
> >
> > よろしくお願いいたします。
> >
> >
> >
> > > -----Original Message-----
> > > From: [E-MAIL ADDRESS DELETED]
> > > [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of Katsuhiko
> > > Nagashima
> > > Sent: Wednesday, December 27, 2006 1:10 AM
> > > To: [E-MAIL ADDRESS DELETED]
> > > Subject: [Seasar-user:5618] Re:[S2Struts]
> > > プリミティブ等のプロパティを含むDTOの検証の動作について
> > >
> > > 永島です。
> > >
> > > > 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.AbstractValidatorAnnotationHandl
> > > > > er
> > > > > > #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 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user




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