Top / Struts / ActionMessagesによるエラー処理と、例外ハンドラで処理した場合の挙動の違い

エラー処理を行う場合、遷移先のエラー画面JSPで

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

などと書いていますが、ActionMessage?を使ったエラー処理の場合と、例外ハンドラを使って処理を行った場合に出力される内容が違ってたのでいろいろ調べてみました。その調査メモ。

例外ハンドラを使ってJSPに遷移した場合、アクションクラスでせっせとセットしたActionMessage?が画面に表示されなかったので、何でかなーと思って調べたのがきっかけです。

まず<bean:write name="message" /> のオブジェクトmessageはどう生成されるのかを調べてみました。これは巡り巡って<html:messages>のタグクラスであるMessagesTag?

MessagesTag.processMessage(ActionMessage)

内の275行目あたりにある

pageContext.setAttribute(id, msg);
id:上のid属性の値(message),
msg: html画面上に表示される文言(型はString)

のmsgオブジェクトでした。すでにStringですね*1

さてこのMessageTag?クラスに渡ってくるActionMessage?インスタンスですが、通常のアクションクラスのエラーなどをセットしたActionMessages?が使われる場合と、例外ハンドラによって処理されたActionMessage?の場合で異なっています。つまり待ち受けてるJSPが同じ

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

だとしても、遷移元の処理の違いによって、渡されるActionMessage?*2が異なるということですね。

通常のアクションクラスでセットしたActionMessage?(s)を表示する場合

msgにはアクションのActionMessage?から取り出した文字列が入ってます。まあ想定通りです。

例外ハンドラによって生成されたActionMessage?(s)を表示する場合


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Struts / ActionMessagesによるエラー処理と、例外ハンドラで処理した場合の挙動の違い

現在のアクセス:17198


*1 これがActionMessage?の数だけぐるぐる回る感じ
*2 というかbean:writeの時点ではString

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS