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

Nishiwaki Kiyoyuki [E-MAIL ADDRESS DELETED]
2006年 12月 21日 (木) 15:34:44 JST


西腋と申します。
立続けで申し訳ありません。

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を追加したら動くと思います。
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: ValidationTest.zip
型:         application/x-zip-compressed
サイズ:     25138 バイト
説明:       無し
URL:        http://ml.seasar.org/archives/seasar-user/attachments/20061221/baacc494/attachment.bin 


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