[Seasar-user:2995] Re: [S2JSF] ErrorPageManagerImpl で無限呼出し発生

Hirotaka HONMA manhole
2005年 12月 5日 (月) 19:06:18 JST


本間です。

On 10/20/05, O.K.U. <[E-MAIL ADDRESS DELETED]> wrote:
> O.K.U.です。毎度お世話になっております。
>
> 早速ですが、org.seasar.jsf.runtime.ErrorPageManagerImpl を使って、
> javax.faces.FacesException 発生時に画面遷移させようと、
> jsfErrorPage.dicon に記述すると、javax.faces.el.EvaluationException 発生時に
> 無限呼び出し状態になります。
>
> 少しソースを追ってみたところ、
> javax.faces.el.EvaluationException が発生した場合、
> org.seasar.jsf.runtime.ErrorPageManagerImpl.handleException() の中の
> getLocation() は そのスーパークラスの例外である javax.faces.FacesException に
> 対応した location を見つけます(dicon に記述したもの)。
> location が見つかったときは、extContext.dispatch(location) を起動しますが、
> この中の動作で org.seasar.jsf.application.ActionListenerImpl.processAction()
> が呼ばれ、そこで例外が javax.faces.el.EvaluationException であれば、
> この中の catch (EvaluationException ex) {...} の中で再び
> ErrorPageManagerImpl.handleException()を呼び出してしまいます。
> すなわち、
>
>   [1] →ErrorPageManagerImpl.handleException()
> →ActionListenerImpl.processAction()→[1]
>
> が無限に繰り返されてしまいます。
> このような例外であっても指定したページに遷移できるようになると嬉しいです。

無限ループはよろしくありませんので、1resuest中に
ErrorPageManagerが2度目に実行された場合は、ステータスコード
400を返して終了するようにしました。

次バージョンから修正を反映します。



Seasar-user メーリングリストの案内