エラー処理を行う場合、遷移先のエラー画面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が異なるということですね。
msgにはアクションのActionMessage?から取り出した文字列が入ってます。まあ想定通りです。
この記事は
現在のアクセス:17198