如果用户已经选择了一种语言(我从 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);
但我仍然得到响应已经提交的异常......
谁能帮我 ?
谢谢
斯蒂芬妮