2017-10-26 18 views
0

私はJSF2フレームワークでGlassfish 4サーバーを使用しています。 response.sendRedirectメソッドを呼び出すときsendRedirect後のIllegalStateException

私の問題は

、私はIllegalStateExceptionが抱えています。

なぜこの例外が発生したのかという単なる手掛かりはありません。

すべてのXHTMLページのコンテキスト

、私は、ユーザーがまだログインしているかどうかを確認するために呼び出され、このメソッドを持っている。

<body id="body" onload="#{utilisateurBean.isUserLoggedIn()}"> 

方法

public void isUserLoggedIn() throws IOException { 
    if(this.user == null){ 
     HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
     response.sendRedirect("Project/accueil/index.xhtml"); 
    } 
} 

例外

Infos: Exception when handling error trying to reset the response. 
java.lang.IllegalStateException 

それとも

Avertissement: Servlet.service() for servlet session.AppExceptionHandler threw exception 
java.lang.IllegalStateException: Cannot forward after response has been committed 

応答がコミットされている理由私は知りません。あなたの助けのための

感謝:)

答えて

1

応答がすでにコミット/定義されているときは、応答を変更することはできません。

ここではページが表示されているので、回答は既に定義されています。

あなたは、ユーザーが接続されていないというエラーメッセージを表示し、再度ログインするようにユーザーに依頼するなど、別の方法で行う必要があります。

また、リダイレクトをjavascriptを使用して行うこともできます。

+0

ありがとう、私は私の問題を修正しました。私はどうしてもスタイルタグ内のCSSを取り除いて(頭のタグで)トリックをやっていません。 – Knriano

1
以下に、あなたのコードを変更し

はスニペット:

public void isUserLoggedIn() throws IOException { 
if(this.user == null){ 
    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
    response.sendRedirect("Project/accueil/index.xhtml"); 
    return; 
} 
} 

または応答がコミットされるかどうかを確認するためのチェックを追加します。

response.isCommitted() 

すでにコミットされた応答に関する詳細は、thisを確認してください。

+0

ありがとうございます。私の問題はheadタグの内側にCSSを書き込むことから来た。それを削除すると問題が解決しました – Knriano

関連する問題