2013-03-12 40 views
2

我正在開發一個使用struts2框架的應用程序。當用戶提供日期範圍時,我需要準備報告excel文件並顯示下載彈出窗口。我可以創建io流的Excel,但我沒有得到如何使用ajax打開彈出窗口。使用ajax下載生成的excel文件

我正在生成文件並返回流。所以不能給文件路徑。我想要ajax電話顯示一些消息,如"Please wait.."。因爲文件生成需要更多的時間,並且它看起來像鏈接不工作..

+0

你可以在這裏發佈AJAX調用和一些動作代碼嗎? – 2013-03-12 12:00:11

+0

你有什麼辦法做到這一點? – 2013-04-08 16:24:59

+0

我已經使用'target =「_ blank」'屬性給表單提交了正常表單提交(正常調用服務器),因爲它會在新窗口中打開,因此沒有機會感覺到凍結當前窗口爲文件創建它需要更多的時間,它被喜歡作爲凍結鏈接) – 2013-04-09 06:37:38

回答

1

沒有關於下載文件的Ajax。

您的請求可以是ajax請求,但只需提供生成的文件路徑,瀏覽器將執行下載。

+0

我正在生成文件並返回流。所以不能給文件路徑。我想要ajax調用來顯示一些消息,如「Please wait ..」。由於文件生成需要更多的時間,並且看起來像鏈接不工作.. – 2013-03-12 12:07:51

+0

當響應是文件時,它將自動完成..只需在發出ajax請求後顯示等待消息... Struts文檔具有關於文件下載。 – Thihara 2013-03-12 12:12:41

+0

如果我創建文件並保存在服務器上,它將分配服務器上的空間,這是不必要的,因爲該文件一旦下載,它將不會再次使用 – 2013-03-12 12:28:37

0

在ajax的成功方法不返回流,而是保存在服務器上的文件,並打開一個彈出地址到一個操作,返回正確的文件。但彈出式窗口可能會在某些瀏覽器中被阻止,因此您需要允許您的網站(本地主機或其他URL)

+0

我不想將文件保存在服務器上。它會分配服務器上的空間,這是不必要的,因爲該文件一旦下載就不會再使用 – 2013-03-12 12:25:21

1

不需要執行任何AJAX調用。

你只需要返回byte[]作爲Struts2 Stream result, 用ContentDisposition: attachment;配置(而不是ContentDisposition: inline,將嘗試打開它在瀏覽器內,而不是詢問下載或桌面應用開放)。

要通知用戶發生了什麼,請求已發送且系統未凍結,則需要Loading OVERLAY

Overlay是一種放置在頁面上的元素,通常具有部分透明背景,動畫圖像顯示「正在加載...」以及行爲(在頁面顯示之前它不會關閉改變,它會阻止相同請求的雙重帖子,如雙擊等等)。

當然,如果你打開一個附件,頁面不會改變,那麼你需要攔截下載的結束並且自己關閉覆蓋,或者給用戶一個關閉它的按鈕。

要攔截它,你可以試試Struts2 Execute and Wait Interceptor

如果您想創建自定義覆蓋圖,可以使用ajaxload.info Generator生成加載圖像。

如果您不想重新發明輪子,可以查看現有疊加層,例如jQuery TOOLS