Struts2 validation

さて、かるくvalidationを触ってみた。

とりあえず、覚書程度に書いておく。

ここでのvalidationはアノテーションを使わないバージョン。

まず、validation.xmlは、
クラスと同じところにクラス名-validation.xmlを用意すればいい。
例えば、SampleActionのvalidationなら
SampleAction-validation.xmlだ。

あとは、struts.xmlのvalidationがあるアクションに
name="input"
のバリデーション失敗時に飛ぶ先を設定してやれば良い。

それと忘れちゃいけないのが、Actionの変更。
ActionSupportをextendsしておかないとログにvalidation-errorが吐き出されるだけで実際何も処理が行われない。

さて、これでvalidationの設定は完了。
実行すると、キチンと出るはず。

ただ、Struts2.0.6では、requiredのparam name="trim"とか
文字列の長さでのvalidationのparam="max"
などはognkExceptionってのがでて怒られる。
どうも、Struts2側のバグで最新版では直っているようだが、体当り修正らしい。今のところは放っといて良いと思う。(*)

それと、Actionの一部のメソッド実行時のみvalidationを働かせるように、@SkipValidationというアノテーションがあるが、
これを使うと、まったくvalidationが利かなくなる。これもバグかもしれない。アノテーションでvalidationを設定していれば問題ないのかもしれない。

struts.xml側でactionの定義を分割するのが一番なのかもしれない。
そのときは、
validation.xmlの名前が、
クラス名-アクション名−validation.xmlとなるので、これまた注意だ。
例)
クラス名:SampleAction
アクション名:SampleSubmit
の場合、
SampleAction-SampleSubmit-validation.xmlとなる。

(*)2007/6/30補足
Stringフィールドにrequiredを設定しているのがそもそもの間違いだった。
Stringフィールドのrequireは"requiredstring"を使う。