1

如果用户已经选择了一种语言(我从 cookie 中知道),我正在使用 JSF 并尝试重定向页面。

所以我设置了一个监听器:

<f:event listener="#{languageSelectionController.checkSkipLanguageSelection}" type="preRenderView" />

检查 cookie 是否存在,如果存在则重定向到主页(不建议语言选择页面)

 if (languageBean.isValidCookieDetected()) {
        FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstance(), "languageSelection.xhtml", "toHome");
    }

但我得到一个例外

java.lang.IllegalStateException: Response already committed
at weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:1602)
at weblogic.servlet.internal.ServletResponseImpl.sendRedirect(ServletResponseImpl.java:833)
at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:576)
at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:182)

我已阅读帖子“响应已提交”到底是什么意思?那么如何处理异常呢?并尝试提高缓冲区大小,但它没有任何改变。

UDPATE:

我使用以下代码设置了一个过滤器:

    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    HttpServletResponse httpServletResponse = (HttpServletResponse) response;
    Cookie[] cookies = httpServletRequest.getCookies();
    for (Cookie c : cookies) {
        if (c.getName().equals("lang")) {
            httpServletResponse.sendRedirect("home.xhtml");
        }
    }
    chain.doFilter(request, response);

但我仍然得到响应已经提交的异常......

谁能帮我 ?

谢谢

斯蒂芬妮

4

0 回答 0