2011-10-05 60 views
0

我在基於Java的Web應用程序中創建報告(使用JasperReports)。每個報告都由Servlet生成並流式傳輸回用戶。 我有作爲附件發回的報告存在問題。 (因爲瀏覽器無法打開Excel文件,Excel報告必須以此方式發回)。而且,這些Excel報告需要很長時間才能生成,因此我在一個新選項卡中打開它們。同時我在原始選項卡中發佈信息消息。 (類似於「請不要關閉新標籤」)。收到servlet響應時的通知

主要問題是我需要知道報告何時失敗或成功。更具體地說,我需要知道回覆是否已發回,我需要知道該回復是報告還是錯誤(現在我正在發送兩個不同的Cookie)。如果失敗,我需要顯示一條錯誤消息,否則我需要刪除信息消息。

我試圖使用jQuery.post()來調用servlet,但是然後沒有出現下載對話框。因此我使用form s。無論如何,服務器都會發送一個cookie。在客戶端,我在等待cookies,當我收到一個cookies時,我決定要做什麼。這種方法很好地工作,如在here偉大的職位desicribed。 但是如果cookie在客戶端被禁用,我可以採取什麼方法?

+0

我不明白這部分:「我試圖用jQuery.post()來調用servlet,但是沒有下載框。」你在說什麼下載箱? – claymore1977

+0

我說的是下載對話框,如果響應是附件,則顯示下載對話框。 (我會改變這部分的問題) – Atticus

+0

@ claymore1977:它是**不可能**使用純JavaScript/Ajax作爲附件下載文件(顯示一個*另存爲*對話框),因爲JS沒有任何功能顯示一個*另存爲*對話框。它必須使用完全同步的請求進行。 – BalusC

回答

0

好吧,如果有人對這個問題感興趣,下面是我最終設法解決它的方法。我使用window.open()函數,而不是使用表單將請求發送到Servlet。我在一個新標籤中打開它。然後我設置了一個interval來檢查兩件事情。

  • 如果是關閉的新窗口(newWindow.closed),那麼我知道該報告成功生成
  • 如果newWindow.document.readyStatecomplete它的含義是報告失敗(因爲如果報告失敗,我發回的內聯響應)。

這種方法的一個優點(在我的情況下)(超出了禁用cookies的作用)是我可以在發生異常時關閉新窗口。

注意:在IE8窗口關閉後,newWindow.document變得無法訪問(Permission denied)。要檢查這個,我使用typeof newWindow.document != 'unknown'