2010-09-21 47 views
1

我有一個JSP頁面需要接受一些信息到一個表單,說表單提交到同一個頁面,並帶有額外的「Thanks for ______」div只有在表單提交之後才能放置(使用參數檢查)。在HTML表單提交後提供一個文件「另存爲」對話框

但是,我還需要在服務器上提供一個文件供下載,但是我不能混淆頭文件的content-disposition來處理文件,因爲整個jsp頁面仍然需要顯示。我怎樣才能提供這個文件,而不會使表單提交到不同的頁面?我可以用什麼JavaScript技巧打開一個可以做到這一點的新窗口? Javascript會沒事的,但沒有什麼彈出式窗口攔截器將王牌..

我不能使用一個href發送文件 - 它必須自動完成。

此外,如果在新窗口中打開該文件(這是一個pdf),那也可以。

回答

3

我以前做過這個。加載你的JSP頁面作爲正常的,但包括一行JavaScript重定向到負責提供該文件的另一頁...

location.href = 'serveFile.jsp'; 

只要serveFile.jsp正確設置content-disposition頭,它只會顯示保存對話框,並不會實際更改頁面。

我該如何提供此文件而無需轉到其他頁面?

你在技術上不能,但你可以保留在上一頁(界面明智)使用這種方法,這實現了我相信你正在尋找的無縫效果。

注:在我的此方法的實現,我發現,保存文件,導航到不同的頁面,然後點擊返回按鈕後,你會得到再次保存對話框。沒有辦法繞過這個。

+0

你使用了哪些內容處置?我試圖在同一個目錄中提供一個文件。這裏是serveFile.jsp:<%String filename =「myPDF.pdf」; response.setHeader(「Content-disposition」, 「attachment; filename =」+ filename);「%>瀏覽器像你說的一樣保留在第一頁上,但頁面是空白的,除了」Thank you「div (下載的文件似乎已被破壞,但這完全是另一個問題。)對不起,這個表單在我按下Enter鍵時會彈出「save edits」按鈕。 – Amalgovinus 2010-09-21 19:52:20

+0

所以,事實證明我只需要在文檔底部的腳本中引用location.href行就可以了,這看起來像是正確的答案,下載的文件仍然因爲我在做setHeader而中斷,但這是一個單獨的問題。 – Amalgovinus 2010-09-21 20:07:17

+0

@Rujiel這個處理頭對我來說很不錯,你可能需要的只是文件名的引號,另外,你確定你把內容類型設置爲「application/pdf」 ?之後寫字節到輸出流你確定你叫'flush()'?並且爲了記錄,我不是金神(但是感謝恭維!:D),我喜歡幫助別人解決我以前遇到的問題。乾杯:) – 2010-09-21 21:00:20