2014-02-13 60 views
0

我的頁面上有一個表單可以生成一個大的PDF文件(可能需要20秒)。 有沒有辦法在下載文件創建時顯示跳動,並在下載提示出現時將其隱藏起來?在等待下載成爲掛毯時顯示跳動圖像

我做了一些檢查,最初認爲我可以使用漸進式顯示,但認爲這不是它的目的。

我想我可以附加一個JS函數,當單擊「下載」按鈕時會觸發顯示我的跳動,但我不確定如何在下載窗口出現時隱藏它。

有沒有辦法在Tapestry中做到這一點?

回答

1

可能更好的解決方案是不提交表格。你可以使用javascript構建一個GET url並使用iframe。

如:

<form> 
    <input id="someText" /> 
    <button onclick="downloadPdf()">Click Me</button> 
</form> 

<script> 
    function downloadPdf() { 
     var url = "/path/to/pdf?someText=" + encodeURIComponent($("#someText").val()); 
     startThrobber(); 
     $('<iframe src="' + url + '" onLoad="stopThrobbber()">').appendTo('body'); 
    } 
</script> 
+0

這看起來像它可以工作,但是,我並沒有實際的鏈接到PDF文件,因爲實際的文件不存在 – Lopina

+0

只需創建一個Tapestry頁面(或組件事件)生成PDF並鏈接到它。您可以從頁面的onActivate()返回StreamResponse。 –

+0

我不知道我在這裏正確地關注你。你是說我應該有一個像這樣的'myContextRoot/myPage/customevent:customparam'的組件事件,並有url指向? – Lopina

1

HTTP有一個限制,你不能返回包含PDF和一些json的單個響應。

你可以做的是:

  1. 提交表單(其中有一個帶參數)
  2. 開始從提交(之前的PDF立即生成PDF
  3. 返回異步工作生成)
  4. 啓動一些JavaScript來輪詢作業直到它完成
  5. 作業完成後,通過javascript下載PDF(document.location.href = /path/to/pdf

有關輪詢異步任務的示例,您可以看到progresslink。您需要將PDF存儲在異步任務(即會話,數據庫或文件系統)中的某個位置。