#author("2022-02-25T01:01:26+00:00","","")
#author("2023-05-29T08:45:13+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
[[Struts/org.apache.struts.action.ActionMessage(メッセージ処理)]] で、ActionMessageを用いたメッセージ処理についてまとめましたが、引き続きエラー処理の記述についてまとめます。

Struts1.1.xのころはActionErrorというのを用いていたのですが、1.3系ではメッセージ処理と同じクラスActionMessage系を使うことになっているようです。メッセージ処理の場合はリクエストスコープにActionMessagesを格納するときに、
 saveMessages(request, messages);
としていましたが、エラーのメッセージ情報(業務エラーが起きちゃいました、とか)は
 saveErrors(request, messages);
を使用します。でJSP側では
 <ul>
 <html:messages id="message" message="false" > <-message属性がfalse
   <li><bean:write name="message" /></li>
 </html:messages>
 </ul>
というようにmessage属性をfalseにするだけです。というよりもデフォルトはfalseなのでsaveMessagesしたときだけmessage属性をtrueにしなさい、というのが正確です。

ActionMessageのセット方法やリソースファイルから取得する方法、IDによるグルーピングなど、基本的にメッセージ処理でできたことは全てエラー処理でもできるようですね。


**<html:errors/> タグの仕組み [#l0acd6f9]
エラー処理については<html:errors/>というエラー処理専門のタグがあります。基本的には<html:messages/>と同じなのですが、リソースファイルからエラー専用のプロパティを取得して表示を装飾する機能を持っています。これを見てみます。

先で見たサンプルのようにアクションクラスでいくつかActionMessageを作成し、リクエストに入れておきます。

  messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("メッセージ0",false));
  messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("msg.message1", "メッセージ1"));
  messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
          "msg.message2", new String[] { "メッセージ2の1", "メッセージ2の2" }));
  messages.add("HogeGroup", new ActionMessage("別グループのメッセージ", false));
  saveErrors(request, messages);

JSP側では、
 <html:errors/>
とだけしておきます。さらに、MessageResources.properties には
 msg.message1={0}
 msg.message2=修飾もできる {0},{1}
 # -- standard errors --
 errors.header=<ul>
 errors.prefix=<li>
 errors.suffix=</li>
 errors.footer=</ul>
とerrorsで始まるプロパティを設定しておきます。このプロパティは特殊なキー値となっていて、<html:errors/> がiterativeにActionMessageを出力するときにヘッダやフッタ、各メッセージのprefix,suffixと共にhtmlを出力します。

結果的に出力結果は以下の通りです。
 <ul>
   <li>メッセージ0</li>
   <li>メッセージ1</li>
   <li>修飾もできる メッセージ2の1,メッセージ2の2</li>
   <li>別グループのメッセージ</li>
 </ul>
というように、始めと終わりにheader,footerを出力し、各メッセージの始めと終わりにprefix,suffixを出力しているのが分かると思います。



**サンプル [#sdba2efd]
-[[errorMessage.jsp>http://www.masatom.in/cgi-bin/viewvc.cgi/tags/V1.0.0_20080119_01/strutsExamples/war/WEB-INF/jsp/errorMessage.jsp?revision=89&root=Others]]
-[[ErrorAction>http://www.masatom.in/cgi-bin/viewvc.cgi/tags/V1.0.0_20080119_01/strutsExamples/source/nu/mine/kino/strutsexamples/actions/ErrorAction.java?revision=89&root=Others]]
-[[MessageResources.properties>http://www.masatom.in/cgi-bin/viewvc.cgi/tags/V1.0.0_20080119_01/strutsExamples/source/nu/mine/kino/strutsexamples/resources/MessageResources.properties?revision=89&root=Others]]


**TIPS [#f5a4e9dc]
***特殊なキー値を変更 [#i08206a5]
先のerrors.headerなどのプロパティ値で、別のキーを使いたい場合はerrorsタグで直接キー値を指定します。
 <html:errors header="myErrors.header" footer="myErrors.footer" />
などとすると、別のキー値を指定できます。header,footer,suffix,prefix全てあるみたいですね。


**関連リンク [#q038ae9f]
-Struts/org.apache.struts.action.ActionMessage(メッセージ処理)


----
この記事は
#vote(おもしろかった[24],そうでもない[4])
#vote(おもしろかった[25],そうでもない[4])
- ちなみにsaveErrors内ではrequest.setAttribute(Globals.ERROR_KEY, errors);ってやってますね -- [[きの]] &new{2008-01-20 (日) 20:35:13};

- ちなみにsaveMessages内ではrequest.setAttribute(Globals.MESSAGE_KEY, messages);ってやってますね -- [[きの]] &new{2008-01-21 (月) 10:35:13};

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS