Strutsのエラーメッセージ処理(つまりはActionErrorsとhtml:errorsタグ)についてあやふやだったので、改めて実験。
あとaction要素内に書くexception要素と、global-exceptionsについても実験。
exception要素にメッセージキーを指定することは出来るけど、これを使うとどんな例外に対しても固定文言になってしまう。発生箇所ごとにメッセージを変えようと思ったら、例外生成時にメッセージキーを入れるのが、誰が考えても無難。
エラーメッセージ(キーと引数)を指定する例外って聞き覚えが無かったけど、ずばりModuleExceptionというのがあった。
それと、サーブレットフィルターについても実験。
フィルターはweb.xmlに記述するものなので、サーブレットと同レベル、つまりStrutsとは直接関係無い。
でもフィルターで何らかの判断を行った結果、Strutsのタグで書かれたエラー画面へ遷移することはよくあるだろう。
フィルターからの遷移先は指定することが出来るので、普通にStrutsで作ったerror.jspへ遷移させられる。
が、JavaEEサーバー(つまりTomcat)起動直後にURL直打ちでフィルターを動かして遷移させたところ、画面表示でエラーになった><
JSPのhtml:errorsの処理であるErrorsTagがModuleConfigとかいうのを取得できなくてNullPointerException。
これはActionServletのinit()で初期化されるようなので、フィルターでいきなりエラー画面に飛ばすと初期化されてないから駄目みたいなんだな。
まぁ、いきなりURL直打ちで必要な情報の入っていないJSPを指定するようなものか。
で、フィルターからActionを経由するようにしたら上手く行ったのだが、その際のデータ受け渡しに、例外クラスを使って、しかも「例外発生時にJavaEEサーバーがその例外をリクエストに保持する為のキー」をそのまま使うのは危険だということが分かった(爆)
そこに例外が入っていると、フィルター処理終了後にエラー発生扱いされてしまうようで…まぁ当然かぁ。
Action内でクリア(リクエストのattributeをremove)してやれば大丈夫かもしれないけど、それでいいのか、自信ないな。
※コメント投稿者のブログIDはブログ作成者のみに通知されます