// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents


エラー処理を行う場合、遷移先のエラー画面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ですね((これがActionMessageの数だけぐるぐる回る感じ))。


さてこのMessageTagクラスに渡ってくるActionMessageインスタンスですが、通常のアクションクラスのエラーなどをセットしたActionMessagesが使われる場合と、例外ハンドラによって処理されたActionMessageの場合で異なっています。つまり待ち受けてるJSPが同じ
 <ul>
 <html:messages id="message">
   <li><bean:write name="message" /></li>
 </html:messages>
 </ul>
だとしても、遷移元の処理の違いによって、渡されるActionMessage((というかbean:writeの時点ではString))が異なるということですね。


**通常のアクションクラスでセットしたActionMessage(s)を表示する場合 [#gd61dbb0]
msgにはアクションのActionMessageから取り出した文字列が入ってます。まあ想定通りです。

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

----
この記事は
#vote(おもしろかった,そうでもない)

#comment
#topicpath


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


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