SAStrutsのバリデーション
DBFluteとは直接無関係ながらも、親和性の高いフレームワークを紹介します。 ここでは、SAStrutsのバリデーションについて。
バリデーションの概要
大きくは二つ
大きく分けると二種類のバリデーション方式があります。
- アノテーション方式
- Formのプロパティにアノテーションを付与してお手軽チェック
- メソッドベタ方式
- バリデーションメソッドの中で自分でなんでもチェック
ハイブリッドway
アノテーション方式は表現に限界があります。 厳密には、独自のバリデーションアノテーションを作るなどすればそうではないですが、 用意されているものだけでとなると業務で求められる複雑な条件のバリデーションはなかなか難しくなってきます。
なので、アノテーション方式だけで済ませるというのではなく、現実的にはメソッドベタ方式も織り交ぜていくことが想定されます。 ハイブリッドなやり方です。
割り切りway
ただ、ハイブリッドだと、バリデーションのロジックが分散してしまいます。 ある項目のチェックがどのようなものなのか?を調べるには、Formの定義とメソッドを見ないといけません。
また、SAStrutsのデフォルトでは、アノテーションによるバリデーションでエラーになったらメソッドのバリデーションは呼ばれません。 これだと二段階バリデーションになってしまい、UI的にはあまり良いものにはなりません。 Executeアノテーションの属性で挙動を変更できますが、それぞれのActionで毎回定義しないといけないので、設定漏れで二段階バリデーションになってしまうかもしません。
なので、アノテーションは一切使わずに、バリデーションメソッドだけでやるというやり方もアリかもしれません。 簡単なバリデーションもロジックで書くのはちょっと面倒かもしれませんが、それはうまくユーティリティを作るなどして、楽に実装できるようにすればいいかと。
アノテーション方式のやり方
Executeでvalidator=true
Executeアノテーションにて validator属性を true にて、input属性にバリデーションエラー発生時に表示するJSPを指定します。
e.g. Executeアノテーションでバリデーションの指定 @Java
@Execute(validator=true, input="index.jsp")
public String index() {
}
Formのフィールドにアノテーションを
そして、ActionFormのpublicフィールドに、バリデーション用のアノテーションを定義します。 すると、リクエストが来たときにバリデーションが実行され、エラーがひとつでもある場合は Action のメソッドは呼ばれずに、input属性で指定されたJSPを表示します。
e.g. ActionFormでバリデーションのアノテーション @Java
@Required
public String memberName;