ログアウトボタンのあるアプリケーションがあります。ボタンをダブルクリックすると、次のようになりますViewExpiredException
。
An unexpected exception was caught during processing the request:
javax.faces.application.ViewExpiredException: /faces/session-timeout.xhtml
私のログアウト方法には次の構造があります。
try {
destroyBackendSession(); // this logs to be successful
} catch (InvalidArgumentException e) {
logError(e);
} finally {
try {
FacesContext.getCurrentInstance().getExternalContext().redirect(userBean.getPortalUrl());
} catch (IOException e) {
logError(e);
}
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}
ここにはエラーが記録されていないため、ここではすべてが期待どおりに機能しているようです。
Bean はリクエストスコープです。
my からの潜在的に関連する構成web.xml
:
<context-param>
<!-- Serialization and deserialization of the component tree is a major performance hit. -->
<param-name>org.apache.myfaces.SERIALIZE_STATE_IN_SESSION</param-name>
<param-value>false</param-value>
</context-param>
[...]
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/faces/session-timeout.xhtml</location>
</error-page>
理想的には、ユーザーをログアウト後にエラー ページではなくポータル ページにリダイレクトしたいと考えています。(userBean.getPortalUrl()
上記の logout() メソッドを参照)