2012-05-10 70 views
4

我已經在客戶端和服務器之間進行了通信。過程很簡單:如何在生成下載的PDF文件時顯示進度條,而不需要IE「下載」警告

  1. 我在做一個AJAX POST請求到一個控制器,它在文件系統中
  2. 在上述請求的形式GET請求以獲取PDF回來的成功生成PDF格式並打開標準瀏覽器「保存或打開」對話框

我有兩個步驟的過程的原因是因爲我需要有一個進度欄,而生成pdf。

第二個請求是表單提交而不是AJAX請求的一部分的原因是因爲我無法獲得標準瀏覽器的「保存或打開」對話框。

這種方法的問題是,IE8 & IE8彈出一個惱人的通知欄,通知用戶下載內容是危險的,我不想這樣做。

所以:

  1. 我所需要的進度條。
  2. 如果我去一個AJAX請求,只需要一種方法來彈出「保存或打開」對話框。
  3. 如果我爲表單提交GET提交,我需要知道何時生成文件以停止進度條,如服務器和客戶端之間的共享標誌。

任何幫助表示讚賞。

回答

3

一個可能的(有點反模式)的解決方法是這樣的,但它不是一個偉大的設計可能

不過,我已經看到了這一點(和承認我這樣做)之前,除有些愧疚,它做

  • 用戶點擊去生成PDF和會只是等待(超時設置應適用),直到它準備在servlet鏈接的伎倆......(內容處置頭等等)就像常規下載

  • 在生成PDF

  • 一個AJAX調用服務器將從會話變量讀取進度,並顯示給用戶

  • 當PDF完成該servlet將報告上的共享會話變量的進展,瀏覽器將只需要下載它(請求超時的風險也許)

這裏的主要問題是使用請求線程的工作線程,並阻止它,這可能會給這個回答幾個downvotes的...

我並不熟悉Message Driven Beans,但這是另一種可能更好的解決方案。

+0

我想到了這個解決方案。我也設法使用cookie來處理它。當pdf準備就緒時,服務器會向用戶的機器設置一個cookie,並且javascript函數會檢查每500ms左右是否存在該cookie,並隱藏進度欄。 這些解決方案將工作,但在我看來並不是最清潔的解決方案。 – Sfairas

+0

不僅僅是贊同,但在我看來,如果它對用戶有用,我不在乎它是如何實現的(只要它沒有錯誤,將來會崩潰,或者難以維護),工作軟件就是隻測量進步... –

+0

謝謝伊蘭。將不得不做更多的研究,並決定我是否採用會議方式。 – Sfairas