1

値を更新するだけのキャンセル ボタンがあります。今、ページを更新または再読み込みして読み取り専用ページに移動するように変換しました。そこで、キャンセルボタンをこのような関数を呼び出すように変更し、

function chkArea(){

        var url='<c:out value="${model.contextPath}"/>/abcHandler.do?operation=view;
        document.forms[0].action=url;
        document.forms[0].submit();
    }

キャンセルを送信すると、UI に次のメッセージが表示されます。

java.lang.IllegalStateException: Response has already been committed    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.EvermindHttpServletResponse.resetBuffer(EvermindHttpServletResponse.java:1892)    at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:249)  at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193) at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284)........

コンソールに次のエラーが表示されます。

javax.servlet.ServletException: The "url" attribute illegally evaluated to "null" or "" in &lt;import&gt;
    at com.evermind.server.http.EvermindPageContext.handlePageThrowable(EvermindPageContext.java:899)
    at com.evermind.server.http.EvermindPageContext.handlePageException(EvermindPageContext.java:816)

JS または JSP にエラーはありません。何が間違っているようですか?助言がありますか?

4

2 に答える 2

4

まず、問題は例1の JSP または JS にはありません。問題は、「.../abcHandler.do?operation=view;」を取得したときにサーブレットが行うことです。リクエスト。

問題は、ヘッダーが送信された後に、HTTP 応答ヘッダーの変更が必要になるようなことをしようとしていることです。それが例外/メッセージが言っていることです。(サーブレット フレームワークが応答の書き込みを開始すると、応答は「コミット」されます。これは通常、何かがサーブレット出力ストリーム/ライターを開いたときにトリガーされます...応答本文を書き込む準備をします。)

ここで特定の問題を修正する方法について適切な診断と賢明なアドバイスを提供するには、上記の要求を処理しているサーブレット/JSP コードを確認する必要があります。

「URLが不正にnullに評価されました」というメッセージは、配置するのが少し難しいです。IllegalStateExceptionそれは…の前または後に起こっている可能性があります。

(可能性の 1 つは、JSP コードが予期しない 'url' 属性を使用して何かを実行しようとしておりnull、それが例外をトリガーしている可能性があります。次に、コンテナーのエラー ハンドラーが別の応答ステータスを設定しようとしており、それが失敗しているためです。応答はすでにコミットされています。)

要約すると、より多くの情報がなければ、根本的な問題が何であるかを理解することはできません。つまりコード。


1 - 実際には、初期化の終了引用符がありませんurl...しかし、それは単なる転記エラーだと思います。

于 2013-06-25T03:22:50.677 に答える
0

このエラーは、jsp からの出力ストリームに書き込んでから、再度操作を実行すると発生します。これが原因IllegalStateExceptionです。応答が既にコミットされている場合は、操作を実行しないでください。コミットとは、応答がクライアントに送り返されることを意味します。一般的なシナリオは

 OutputStream stream = response.getOutPutStream();
  stream.write("something here");
  stream.flush();
 RequestDispatcher rd = request.getRequestDispatcher("someFile.jsp");
   rd.forward(request, response); // You can't do this because stream is already written
于 2013-06-25T03:05:25.850 に答える