Top / Struts / org.apache.struts.action.ActionMessage(エラー処理)

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/> タグの仕組み

エラー処理については<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を出力しているのが分かると思います。

サンプル

TIPS

特殊なキー値を変更

先のerrors.headerなどのプロパティ値で、別のキーを使いたい場合はerrorsタグで直接キー値を指定します。

<html:errors header="myErrors.header" footer="myErrors.footer" />

などとすると、別のキー値を指定できます。header,footer,suffix,prefix全てあるみたいですね。

関連リンク


この記事は

選択肢 投票
おもしろかった 25  
そうでもない 4  
  • ちなみにsaveErrors内ではrequest.setAttribute(Globals.ERROR_KEY, errors);ってやってますね -- きの? 2008-01-20 (日) 20:35:13
  • ちなみにsaveMessages内ではrequest.setAttribute(Globals.MESSAGE_KEY, messages);ってやってますね -- きの? 2008-01-21 (月) 10:35:13

Top / Struts / org.apache.struts.action.ActionMessage(エラー処理)

現在のアクセス:25127


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-05-29 (月) 17:45:13 (329d)