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以前)の方式が、まだ使えるため統一感のない複数の方法があります。

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


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

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

そうなると、前述ののように、
メッセージごとに

  • で囲んだりできないのでは?
    と思うのですが、それはprefix,suffixという指定を利用します。

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

    errors.header=

      errors.prefix=

    1. errors.suffix=
    2. errors.footer=

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

      ...header

    1. エラー1
    2. ...prefix【内容】suffix

    3. エラー2
    4. エラー2

    ...footer

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

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

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

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


    a

    コメントを残す

    メールアドレスが公開されることはありません。

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

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください