私はJSFで作業しており、ユーザーがすでに言語を選択している場合にページをリダイレクトしようとしています(Cookieから知っています)。
だから私はリスナーを設定しました:
<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);
しかし、私はまだ応答が既にコミットされているという例外を受け取りました...
誰でも私を助けることができますか?
ありがとう
ステファン