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 中。问题在于您的 servlet 在获得“.../abcHandler.do?operation=view;”时会做什么 要求。

问题是您正在尝试做一些需要更改 HTTP 响应标头的事情……在标头发送后。这就是异常/消息所说的。(一旦 servlet 框架开始写入响应,就会“提交”响应。这通常在某些东西打开 servlet 输出流/写入器时触发……准备写入响应正文。)

为了给您一个正确的诊断,以及如何解决这里的具体问题的明智建议,我们需要查看处理上述请求的 Servlet/JSP 代码。

“url 被非法评估为 null”消息有点难以放置。它可能发生在IllegalStateException……之前或之后。

(一种可能性是您的 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 回答