前回(Strutsメッセージのまとめ-(3))からの続きです。
- JSPでの通常のリソース文言(国際化対応など)…まとめ(1)
- Actionから通知される通常メッセージ…まとめ(2)
- Actionから通知されるエラーメッセージ…まとめ(3)
- validateでのエラーメッセージ…まとめ(4)←今回
- validatorでのエラーメッセージ…まとめ(5)
4.validateでのエラーメッセージ
今回紹介するvalidateでのエラーメッセージは、妥当性検証時に発生するエラーメッセージです。
ActionFormにセットさせない場合に、使用するメッセージです。
ところで、ActionFormのvalidateメソッドは、古いStrutsから存在する妥当性検証の機能です。
validator(次回説明)を使えば、validateメソッドを使わなくてもよいのですが、
validateメソッドの方が、簡潔で分かりやすい点もあるため、まだ利用価値はあります。
validateメソッドは、ActionErrorsというメッセージの器を使用します。
3.の説明のときには、
「ActionErrorsは古い形式のクラスだからもう使わない。代わりにActionMessagesを使う」
と説明したのですが、validateメソッドではまだ使われています。
validateメソッドは、ActionFormに記述します。
スーパークラスActionFormに中身なしで実装されているので、これをオーバーライドします。
public ActionErrors validate(
ActionMapping mapping, HttpServletRequest request) {
戻り値として、ActionErrorsを返します。
このメソッド内で妥当性検証を行い、1件もエラーメッセージが登録されていなければ、妥当性検証をパスしたことになります。
エラーがある場合にはメッセージを登録します。
ここでは、2つのフィールド(text1,text2)について、必須入力、数値チェックを行います。
//入力データの妥当性検証
ActionErrors errors = new ActionErrors();
if (text1 == null || text1.equals("")){
//必須入力
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("msg4.required", "text1"));
}
if (text2 == null || text2.equals("")){
//必須入力
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("msg4.required", "text2"));
} else if (!text2.matches("\\d+")){
//要数値
errors.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("msg4.numeric", "text2"));
}
メッセージの作成の仕方は、3.のときと同じ作り方です。
作成したActionErrorsを戻り値として返却します。
JSPでの利用方法は、3.のときと全く同じです。
タグを使ってもよいですし、
タグを使ってもOKです。
今回は、
タグを使っています。
validateメソッドは、入力データに対するチェックを行うものです。
Actionが呼び出される前に検証が行われ、入力エラーの場合は、Actionを呼び出さずに入力画面に戻ります。
この設定はstruts-configに記述します。
validate属性がtrueのときに検証が行われます。
といっても既定はtrueなので、省略しても、validateメソッドを記述すれば検証が行われます。
input属性は、検証エラー時に遷移する先を記述しています。
まとめると、検証を行うタイミングが用意されているだけで、Actionでエラーメッセージを記述する方法と同じです。
validateの仕組みに乗っかることで、本来のActionの処理と、入力チェックの処理を、明確に分けることができます。
サンプルプログラムはStrutsMsg4.zipです。
次回は、validateをさらに強力にしたvalidatorでのエラーメッセージです。
仕組みが複雑で分かりにくいのですが、設定だけで妥当性検証ができる優れた機能です。