2
使用AJAX時,有可能知道哪個組件被點擊導致ViewExpiredException
被拋出?如果用戶只是試圖註銷並向他顯示正常的註銷頁面,我想避免顯示會話過期頁面。FullAjaxExceptionHandler - 找出哪個組件導致ViewExpiredException?
我想覆蓋shouldHandleExceptionRootCause
但我找不到任何東西來確定是否按下注銷按鈕。
我正在使用Mojarra JSF 2.2和Omnifaces 2.5.1。
解
@Override
protected boolean shouldHandleExceptionRootCause(FacesContext context, Throwable exception)
{
UIComponent source = Components.getCurrentActionSource();
if (source != null && "logout".equals(source.getId()))
{
NavigationHandler nh = context.getApplication().getNavigationHandler();
nh.handleNavigation(context, null, "logout.xhtml?faces-redirect=true");
return false;
}
else
{
return super.shouldHandleExceptionRootCause(context, exception);
}
}
正是我在找的東西,再次感謝你!在導航到註銷頁面後,是否需要使用類似'OmniPartialViewContext.getCurrentInstance(context).closePartialResponse();'的東西? – lazlev
如果在呈現響應中發生異常,並且已經寫入了部分ajax響應,則只調用'resetPartialResponse()'。通常情況下,ViewExpiredException不是這樣。 – BalusC