我有一个取消按钮,用于刷新值。现在我已将它们转换为刷新或重新加载页面并移至只读页面。所以更改了取消按钮来调用这样的函数,
function chkArea(){
var url='<c:out value="${model.contextPath}"/>/abcHandler.do?operation=view;
document.forms[0].action=url;
document.forms[0].submit();
}
现在当我提交取消时,我在用户界面中收到以下消息,
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 <import>
at com.evermind.server.http.EvermindPageContext.handlePageThrowable(EvermindPageContext.java:899)
at com.evermind.server.http.EvermindPageContext.handlePageException(EvermindPageContext.java:816)
我没有在JS或JSP中看到任何错误。什么似乎是错的?有什么建议吗?
答案 0 :(得分:4)
首先,问题不在您的示例 1 中的JSP或JS中。问题出在你的servlet获得“... / abcHandler.do?operation=view;”时所做的事情。请求。
问题在于您尝试执行需要更改HTTP响应标头的内容...在标头发送后。这就是异常/消息所说的内容。 (一旦servlet框架开始编写响应,响应就会“提交”。当某些东西打开servlet输出流/编写器时,通常触发...准备写入回应机构。)
为了给您一个正确的诊断,以及如何解决特定问题的合理建议,我们需要查看处理上述请求的Servlet / JSP代码。
“非法评估为空的网址”消息有点难以置信。它可能发生在IllegalStateException
之前或之后。
(一种可能性是你的JSP代码试图用一些意外null
的'url'属性来做某事,即触发异常。然后容器的错误处理程序试图设置不同的响应状态...和 失败,因为响应已经提交。)
总之,如果没有更多信息,就无法弄清楚 root 问题是什么;即代码。
1 - 实际上,你错过了url
初始化的结束语...但我认为这只是一个转录错误。
答案 1 :(得分: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