Session 单击带有按钮的Websphere Portal JSF 2会话超时页面会导致视图过期异常

Session 单击带有按钮的Websphere Portal JSF 2会话超时页面会导致视图过期异常,session,jsf-2,websphere,portal,viewexpiredexception,Session,Jsf 2,Websphere,Portal,Viewexpiredexception,我正在使用WebSpherePortal8和PrimeFaces3.5。要求是,当会话超时时,用户被重定向到会话超时页面,该页面上有一个按钮,单击该按钮时,用户将返回登录页面。 登录页面包含一个portlet,会话超时页面也包含一个portlet——两者都在同一个portlet应用程序中。 我正在使用隐式输出筛选器成功重定向到会话超时页面: @Override public void logout(HttpServletRequest request, HttpServletResponse r

我正在使用WebSpherePortal8和PrimeFaces3.5。要求是,当会话超时时,用户被重定向到会话超时页面,该页面上有一个按钮,单击该按钮时,用户将返回登录页面。 登录页面包含一个portlet,会话超时页面也包含一个portlet——两者都在同一个portlet应用程序中。 我正在使用隐式输出筛选器成功重定向到会话超时页面:

@Override
public void logout(HttpServletRequest request, HttpServletResponse response,        FilterChainContext filterContext, LogoutFilterChain chain) throws LogoutException, LoginException {
chain.logout(request, response, filterContext);
if (filterContext.getRedirectURL() != null) {
if (logger.isLoggable(Level.FINEST)) {
logger.logp(Level.FINEST, CLASS_NAME, MethodName.LOGOUT, "Redirecting to session timeout page: " + SESSION_TIMEOUT_PAGE_URL);
}
filterContext.setRedirectURL(SESSION_TIMEOUT_PAGE_URL);
}
}
会话超时页面上的portlet包含一个按钮,用于调用重定向到登录页面的portlet操作:

public void navigateToPortalPage(String pageUniqueName) throws RpmPortalException {
    final String methodName = "navigateToPortalPage";
    RpmPortalPage portalPage = getNavigationManager().getPortalPage(pageUniqueName, getPortletRequest(), getPortletResponse());
    try {
        FacesContext context = getFacesContext();
        if (context != null) {
            context.getExternalContext().redirect(portalPage.getUrl());
            context.responseComplete();
        }
    } catch (IOException e) {
        RpmExceptionUtils.logAndThrowException(CLASSNAME, methodName + "(" + pageUniqueName + ")", RpmErrorCode.RPM_CONFIG_00004, getLoggedinUser(), e);
    }
}

但是,当单击按钮而不是转到登录页面时,将引发ViewExpired异常。此异常由异常处理程序处理,异常处理程序处理异常,重定向到错误页面并向用户显示错误

我的问题是如何避免会话过期后出现ViewExpired异常,因为我只希望能够重定向到登录页面,而不会在这种情况下出现ViewExpiredException

提前谢谢你的帮助

我的问题是如何在会话过期后避免ViewExpired异常,因为我只希望能够重定向到登录页面,而不会在这种情况下发生ViewExpiredException

只需将登录页面指定为
ViewExpiredException
的错误页面

<error-page>
    <exception-type>javax.faces.application.ViewExpiredException</exception-type>
    <location>/login.xhtml</location>
</error-page>

javax.faces.application.ViewExpiredException
/login.xhtml
(这假设您已经在
*.xhtml
上映射了faces servlet,否则会相应地修改)

另见:

看看这个@neni:这并不是OP所要求的,另外,该解决方案完全破坏了
@ViewScoped
bean,因此要求您只使用
@RequestScoped
bean。视图处理程序解决方案不适用于我们,因为我们已经尝试使用了ITI…由于登录portlet位于单独的门户页面上,我修改了异常处理程序以检查ViewExpired异常,并然后重定向到登录页面,portlet在其中呈现ok。谢谢你们的帮助