我試着做以下幾點:可以刪除zkoss Events.echoEvent?
- 發送長期執行的請求(我在這裏使用
Events.echoEvent
) - 顯示模態對話框(等待...)用 「取消」 按鈕
- 如果用戶按下「取消「,對話框被隱藏,不應該執行事件方法。
- 如果用戶沒有按下按鈕並等待。事件方法被調用並關閉等待對話框
我該怎麼做?
我試着做以下幾點:可以刪除zkoss Events.echoEvent?
Events.echoEvent
)我該怎麼做?
ZK通常在單個線程中爲服務器上的單個請求工作。 Events.echoEvent
可以通過完成請求來解決該問題,然後在全新請求(和線程)中立即回撥至服務器。用戶與客戶端的交互觸發了一個新的請求,所以這也將是一個新的線程。
echoEvent
echoEvent
所以,在你上面的例子,你將用三個線程工作當用戶點擊'取消'時
很明顯,第一個會在最後兩個被調用的時候消失,但這就是你需要考慮解決你的問題。
你會在StackOverflow上找到關於讓兩個線程進行交互的大量討論,或者更具體地說,讓一個線程中斷另一個線程。
我將把你'How to stop threads in Java?'那裏接受的答案贊成共享某種「停止標誌」相對於直接調用線程interrupt
的。
在你的情況下,這將發揮與長期運行的過程做它的工作,同時定期檢查停止標誌(簡單的boolean
)。當用戶點擊「取消」時,您只需將標誌翻轉至true
即可。
您可以嘗試
創建一個線程來執行長時間操作肖恩上述 提到的(這是一個獨立的線程,不ZK請求線程)
創建一個定時器來檢查該線程的狀態定期。 (這將創建一個javascript定時器在客戶端定期發送ajax請求)
並通過ZK客戶端編程自定義繁忙屏蔽以添加取消按鈕。 (點擊該按鈕執行另一個Ajax請求)
請參閱類似的文章在計算器: Override 「Processing」 in ZK
編輯:
有我博客的一些相關文章:
ZK: Customize the mask for showBusy