2013-06-25 4 views
1

У меня есть кнопка отмены, которая использовала только для обновления значений. Теперь я конвертировал их для обновления или перезагрузки страницы и перехода на страницу «Только для чтения». Так изменилась кнопка отмены вызова функции, как это,Ответ был сделан

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 &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. Что кажется неправильным? какие-либо предложения?

+0

Для гуглеров: если вы используете 'externalContext.redirect()', попробуйте включить это условие: 'if (! ExternalContext.isResponseCommitted()) {}' (Вот почему я получал это исключение.) – Andrew

ответ

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 
+0

ya поэтому я попробовал autoflush = "true". Даже это дает ту же ошибку. – JNPW

+0

Удостоверьтесь, что у вас нет ничего похожего на код выше в вашем jsps –

+0

У меня нет ничего подобного выше.Мой actionclass просто переходит в JSP. – JNPW

4

Во-первых, проблема заключается не в JSP или JS в вашем примере . Проблема в том, что делает ваш сервлет, когда он получает «.../abcHandler.do?operation=view;» запрос.

Проблема в том, что вы пытаетесь сделать материал, который потребует изменения заголовков HTTP-ответа ... после отправки заголовков. Это то, что говорит исключение/сообщение. (А ответ «привержен» после того, как каркас сервлета начинает писать ответ. Это обычно срабатывает, когда что-то открывает выход сервлета поток/запись ... в процессе подготовки к написанию тела ответа.)

Для дайте вам правильный диагноз и разумные советы о том, как исправить конкретную проблему здесь, нам нужно увидеть код Servlet/JSP, который обрабатывает вышеуказанный запрос.

Сообщение «url незаконно оценивается до нуля» немного сложно разместить. Это может происходить до IllegalStateException ... или после него.

(Одна из возможностей заключается в том, что ваш JSP-код пытается что-то сделать с некоторым атрибутом «url», который неожиданно вызывает null, что вызывает исключение. Затем обработчик ошибок контейнера пытается установить другой статус ответа ... . и что терпит неудачу, потому что ответ уже)

в целом, это не представляется возможным, чтобы выяснить, что корень проблема без дополнительной информации; т.е. код.


1 - На самом деле, вам не хватает закрывающей кавычки для url инициализации ... но я предполагаю, что это просто ошибка транскрипции.