0

呼び出されたメソッドでは、preRenderViewいくつかの検証が実行され、失敗した場合はリダイレクトが発生します。

しかし、私はIllegalStateException

Information: Exception when handling error trying to reset the response.
java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:524)
    at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:602)
    at package.FacesContextUtils.redirect(FacesContextUtils.java:581)

コードは次のとおりです。

public void initPreRenderView(final String value) throws DatabaseException
{
    if (value == null)
    {
        FacesContextUtils.addMessageInvalidLinkRedirect(context, url);
        return;
    }
}

基本的に、ユーティリティ関数は次のもので構成されます。

public static void addMessageInvalidLinkRedirect(FacesContext context, String url)
{
    context.addMessage(null, new FacesMessage("Invalid link..."));
    try
    {
        context.getExternalContext().redirect(url);
    }
    catch (final IOException e)
    {
        // add error message
    }
}

このトピックに関する多くの回答は、redirection ステートメントの後に return を追加することを想定しています。これは preRenderView メソッドで行いました。

編集:

リダイレクトが行われ、すべてが期待どおりに機能します。このエラーメッセージを取り除きたいだけです。

4

2 に答える 2

2

問題は、return ステートメントの有無ではありません。問題は、応答をリセットできないことです。これがどこで発生するかを見てみましょう。

java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:524)

ソース コードに基づいて、これは return のときにスローされisCommitted()ますtrue。したがって、応答はすでにコミットされています。応答の一部は既にクライアントに送信されています。

あなたの質問にはそれを示すものは何もありません。したがって、問題の原因は、これまでに提供された情報以外の場所で探す必要があります。標準の JSF では、これは発生しないはずなので、ヘッダーを設定/コミットしているサーブレット フィルターがどこかにあるのではないでしょうか?

于 2013-07-11T15:08:49.983 に答える
1

同様の問題が発生していました。問題は、私が期待していたものを呼び出す前に、別のリダイレクト要求が行われていたことであることが判明しました。1 つのリダイレクト要求が既に行われていたため、IllegalStateException がスローされました。

于 2014-02-20T21:36:52.093 に答える