Уведомление о получении ответа сервлета - PullRequest
0 голосов
/ 05 октября 2011

Я создаю отчеты (с JasperReports) в веб-приложении Java.Каждый отчет генерируется Servlet и передается обратно пользователю.У меня проблемы с отчетами, которые отправляются обратно в виде вложений.(Отчеты Excel должны отправляться обратно таким образом, потому что браузеры не могут открывать файлы Excel).Более того, создание этих отчетов Excel занимает слишком много времени, поэтому я открываю их в новой вкладке.Тем временем я размещаю информационное сообщение в исходной вкладке.(что-то вроде «Пожалуйста, не закрывайте новую вкладку»).

Основная проблема заключается в том, что мне нужно знать, когда отчет не удался или успешно.В частности, мне нужно знать, был ли ответ отправлен обратно, и мне нужно знать, является ли этот ответ отчетом или ошибкой (сейчас я отправляю обратно два разных куки-файла).Если это не удалось, мне нужно показать сообщение об ошибке, в противном случае мне нужно удалить информационное сообщение.

Я попытался использовать jQuery.post() для вызова сервлетов, но затем диалог загрузки не появляется.Поэтому я использую form с.Сервер отправляет обратно куки, несмотря ни на что.На стороне клиента я жду куки, и когда я их получаю, я решаю, что делать.Этот подход работает КРАСОТНО, как описано в большом посте здесь .Но какой подход я могу использовать, если файлы cookie отключены на стороне клиента?

1 Ответ

0 голосов
/ 07 октября 2011

Ну, если кто-то заинтересован в этом вопросе, вот как мне наконец удалось его решить. Вместо того, чтобы использовать форму для отправки моего запроса на Servlet, я использую функцию window.open(). Я открываю его в новой вкладке. Затем я установил interval, чтобы проверить две вещи.

  • если новое окно закрыто (newWindow.closed), то я знаю, что отчет сгенерирован успешно
  • если newWindow.document.readyState равно complete, это означает, что отчет не выполнен (потому что, если отчет не работает, я отправляю ответ в виде строки).

Одним из преимуществ (в моем случае) этого подхода (помимо работ, в которых отключены файлы cookie) является то, что я могу закрыть новое окно при возникновении исключения.

ПРИМЕЧАНИЕ: В IE8 после закрытия окна newWindow.document становится недоступным (в доступе отказано). Для проверки я использую typeof newWindow.document != 'unknown'.

...