我剛開始使用Wicket(並且真的不太熟悉很多Web開發)並且對於下載鏈接有疑問。我有一個Web應用程序,它只是允許用戶上傳特定文件,處理文件中的一些信息,並提供不同格式的處理信息的下載。然而,這實際上應該是我正在編寫的一些軟件的精簡版本,所以我真的不想做太多的處理。我想知道是否有辦法設置下載鏈接的超時時間,這樣如果用戶點擊鏈接並且處理時間超過20秒,它將簡單地退出處理並向它們發送錯誤代替。謝謝!在Wicket中設置下載鏈接超時?
回答
我與哈維同意,處理(和處理可能終止)應該用線程來完成。
但是,特別是如果它只需要幾秒鐘,不僅僅是等待打開的連接,而是定期檢查線程是否完成。
我會做這樣的事情:
- 啓動線程做實際工作
- 顯示
Panel
,說:「處理您的下載」或類似的東西。 - 將一個
AbstractAjaxTimerBehavior
附加到面板上,並持續時間爲10秒左右。 - 在計時器行爲的
onTimer
方法,檢查狀態的處理:- 如果它仍然在工作,什麼也不做。
- 如果由於花費時間太長而取消,請向用戶顯示一條消息,例如「已取消」。通過更換面板或將警告標籤設置爲可見。
- 如果完成,請顯示一條消息,如「您的下載開始」並開始下載。見this document如何做一個Ajax響應,並在同一時間啓動下載
爲了能夠取消處理,如果它需要超過給定的時間量,那麼在單獨的線程中執行它是適當的。這個問題在以下問題中得到解決:How to timeout a thread。
現在對於Wicket部分:如果我明白你想要達到什麼目的,你可以例如推出自己的Link
來執行處理,並在結果未響應的情況下作出響應。如果處理過程花費太多時間,您可以簡單地拋出一個錯誤(記住有一個FeedbackPanel
,以便它可以顯示)。
爲了提高效率,可以在LoadableDetachableModel
中執行處理或生成要下載的文件。詳情請參見這個問題:How to use Wicket's DownloadLink with a file generated on the fly?
例如:
IModel<File> processedFileModel = new LoadableDetachableModel<File>(){
protected File load(){
// Implement processing in a separate thread.
// If it times out it could return null, for instance
}
}
Link<File> downloadLink = new Link<File>("yourID", processedFileModel) {
@Override
public void onClick() {
File processedFile = getModelObject();
if (file != null) {
IResourceStream rs = new FileResourceStream(file);
getRequestCycle().setRequestTarget(new ResourceStreamRequestTarget(rs));
} else {
error("Processing took too long");
}
}
};
這仍然會阻止連接(從而保持連接在服務器上!),而等待處理做。 –
使用'AjaxFallbackLink'會使事物與JS啓用異步,不是嗎?當然,Ajax響應無法傳回文件,因此ajax響應必須添加另一個鏈接或類似內容。 –
Ajax鏈接在Wicket中排隊,所以它們仍然一個接一個地工作。在瀏覽器中,它們當然是異步的,但我的觀點是,連接將在您的服務器上打開,並且佔用它的資源。對於低容量服務來說不是問題,但要記住。 –
- 1. Wicket下載鏈接
- 2. 在Wicket中設置超時值?
- 3. 在圖像下方設置超鏈接
- 4. NavigateUri爲空時不設置超鏈接
- 5. SAMP下載鏈接或設置?
- 6. 爲Mod設置mod_rewrite下載鏈接
- 7. 如何設置在java中下載文件的超時時間?
- 8. 在wysihtml5編輯器中插入超鏈接時設置焦點
- 9. 如何在rails 3.2中設置pdf下載鏈接?
- 10. Outlook從超鏈接下載文件
- 11. 下載鏈接在servlet中
- 12. 當超鏈接到圖像時,超鏈接的位置
- 13. 下拉超鏈接
- 14. 設置SSH連接超時
- 15. Lua設置連接超時
- 16. 下載臨時鏈接
- 17. 下載鏈接,可選擇保存文件的目錄apache wicket
- 18. 如何設置Repeater內的超鏈接控制下載計數器? asp.net
- 19. 創建XML超鏈接下載鏈接動態
- 20. aFrame.io創建超鏈接和下載鏈接
- 21. 將文本設置爲超鏈接javascript
- 22. 設置PikaChoose圖像爲超鏈接
- 23. 設置asp超鏈接值JS
- 24. 將焦點設置爲超鏈接
- 25. 如何設置預先HTML超鏈接?
- 26. 設置超鏈接到iReport的
- 27. 將href設置爲超鏈接文本
- 28. 將超鏈接設置爲RichTextBox
- 29. WCF - 在大文件上設置超時下載
- 30. 在TCP中設置超時
很好的答案。不知道該wiki頁面。謝謝 ;) –