3

GlassFish3.0.1にデプロイされた非常に単純なWebアプリケーションがあります。通常のFORMベースの認証を使用しており、JDBCレルムを使用してアプリケーションを保護しています。ビューは、Faceletsを使用してJSF2によって処理されます。

私が抱えている問題は、ユーザーがah:commandButtonまたはその他の投稿をクリックした場合にセッションが期限切れになると、XML解析エラーが発生したことを示すひどいイエローページが表示されることです。ログには、3つのスタックトレースがあります。

INFO: PWC2787: Session event listener threw exception
org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.RequestScoped
at org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:679)
at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance(ClientProxyMethodHandler.java:138)
at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:100)
<snip>

WARNING: ApplicationDispatcher[/core] PWC1231: Servlet.service() for servlet Faces Servlet threw exception
javax.faces.application.ViewExpiredException: viewId:/login.xhtml - View /login.xhtml could not be restored.
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:212)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
<snip>

WARNING: Unexpected error forwarding or redirecting to login page
javax.servlet.ServletException: viewId:/login.xhtml - View /login.xhtml could not be restored.
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:822)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:517)
<snip>

この問題に対処するためのクリーンでシンプルな方法を見つけることができないようです。web.xmlでViewExpiredExceptionのエラーハンドラーを設定しようとしましたが、呼び出されませんでした。システムは最初の例外ですでに諦めていると思います。今のところ、ユーザーが死のイエローページを表示しない限り、この状況でユーザーをどこに送るかはあまり気にしません。

注:ポストバック以外のリンクは、ログインページを正しく検索してリダイレクトします。

4

1 に答える 1

1

残念ながら、これに取り組むための標準的な方法はありません。少なくとも、かなりの調査を行った後、私たちが見つけたものは何もありません。

あなたができることは次のとおりです。

(1)独自のJSF-ExceptionHandlerをfaces-config.xmlに登録し、必要な例外を処理できるようにします。その後、error-/login-pageにリダイレクトします。完全に些細なことではありませんが、間違いなく可能です-それが私たちのやり方です。

(2)Seam-Catchを見て(そして使用して) 、同じメカニズムを使用しています(ただし、よりエレガントなCDI準拠の方法で)。2か月前に準備ができていなかったため、使用しませんでした。

于 2011-03-30T18:53:22.660 に答える