Strutsメッセージのまとめ-(3)

前回(Strutsメッセージのまとめ-(2))からの続きです。

3.Actionから通知されるエラーメッセージ

ActionMessagesと、ActionMessageを使う点は、2.の通常メッセージと同じです。

以前からStrutsを使っていた人は、ActionErrorsとActionErrorを使っていたと思うのですが、これはStruts1.2からは使われなくなりました。
ActionErrorsは、validateメソッド(次回説明)での戻り値として、まだ利用するのですが、ActionErrorは、非推奨になっています。

「Actionから通知されるエラーメッセージ」は、validateメソッドや、validatorで使われる妥当性検証とは、ちょっと違います。
妥当性検証は、入力データとして妥当かどうかの簡単なチェックしか行いません。
その代わり、データベースなどを使用せずに、JavaScriptでチェックしたり素早い確認が可能です。
一方、「Actionから通知されるエラーメッセージ」は、妥当性検証をパスしたが、業務ルール的にエラーになったりした場合です。
データベース上での整合性や、他のシステムと連携して入力チェックをしたり、入力は問題ないが、システム上の問題で、エラーが発生したりする場合に使用されます。

器を用意します。
ActionMessages messages = new ActionMessages();
以前のStrutsは、ActionErrorsを使っていましたが、非推奨になったので使いません。

この器にメッセージオブジェクトを追加します。

messages.add(ActionMessages.GLOBAL_MESSAGE,
	new ActionMessage("msg3.error1"));

※1つ目のパラメータは、ActionErros.GLOBAL_ERROR(非推奨)ではないので注意してください。

最後にエラーメッセージとして保存します。
saveErrors(request, messages);

これでAction側の処理はおしまいです。
通常メッセージとほとんど同じで、最後が、saveErrorsで保存する点だけが違います。
以前のStrutsと比べ、通常メッセージとエラーメッセージが統一された操作になっています。

JSPは、実は以前のStruts(1.1以前)の方式が、まだ使えるため統一感のない複数の方法があります。

まずは最も標準的な方法。
通常メッセージと同じように、<html:messages>タグを使用します。

<ul>
<html:messages id="msg" message="false">
	<li><bean:write name="msg"/></li>
</html:messages>
</ul>

使い方は通常メッセージと同じなのですが、message属性はfalseにしなければなりません。
省略するとfalseなので、省略してもOKです。
true→通常メッセージの出力
false→エラーメッセージの出力

従来方式の書き方では、
<html:errors/>を使います。
<html:messages>は、iterateする機能だけを提供し、中身を自分で記述しました。
一方、<html:errors/>は、中身はかけなくて勝手に全メッセージを展開します。(ややこしい!)

そうなると、前述の<html:messages>のように、
メッセージごとに<li></li>で囲んだりできないのでは?
と思うのですが、それはprefix,suffixという指定を利用します。

リソースファイルにはこのように記述しています。


errors.header=<ol>
errors.prefix=<li>
errors.suffix=</li>
errors.footer=</ol>

こうすると、例えばエラーが3つあった場合に、


<ol>	...header
	<li>エラー1</li>	...prefix【内容】suffix
	<li>エラー2</li>
	<li>エラー2</li>
</ol>	...footer

というように出力します。
リソースにおける、errors.header, errors.prefix, errors.suffix, errors.footerの4つは、特別なリソースキーになります。

<html:errors/>タグのheader属性で別のリソースのキーを指定すれば、
その箇所だけ別のheaderを指定することもできます。(footer,prefix,suffixも同様)
<html:errors header="msg3.header" footer="msg3.footer"/>

エラーメッセージは、古い方式と新しい方式が混在しているので注意が必要です。
サンプルプログラムはStrutsMsg-3.zipです。

次回は、validateでのエラーメッセージについてです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)