2012-12-27 56 views
1

我試着做以下幾點:可以刪除zkoss Events.echoEvent?

  1. 發送長期執行的請求(我在這裏使用Events.echoEvent
  2. 顯示模態對話框(等待...)用 「取消」 按鈕
  3. 如果用戶按下「取消「,對話框被隱藏,不應該執行事件方法。
  4. 如果用戶沒有按下按鈕並等待。事件方法被調用並關閉等待對話框

我該怎麼做?

回答

2

ZK通常在單個線程中爲服務器上的單個請求工作。 Events.echoEvent可以通過完成請求來解決該問題,然後在全新請求(和線程)中立即回撥至服務器。用戶與客戶端的交互觸發了一個新的請求,所以這也將是一個新的線程。

  1. 針對由echoEvent
  2. 的請求創建創建新的請求調用echoEvent
  3. 原始請求:

    所以,在你上面的例子,你將用三個線程工作當用戶點擊'取消'時

很明顯,第一個會在最後兩個被調用的時候消失,但這就是你需要考慮解決你的問題。

你會在StackOverflow上找到關於讓兩個線程進行交互的大量討論,或者更具體地說,讓一個線程中斷另一個線程。

我將把你'How to stop threads in Java?'那裏接受的答案贊成共享某種「停止標誌」相對於直接調用線程interrupt的。

在你的情況下,這將發揮與長期運行的過程做它的工作,同時定期檢查停止標誌(簡單的boolean)。當用戶點擊「取消」時,您只需將標誌翻轉至true即可。

1

您可以嘗試

  1. 創建一個線程來執行長時間操作肖恩上述 提到的(這是一個獨立的線程,不ZK請求線程)

  2. 創建一個定時器來檢查該線程的狀態定期。 (這將創建一個javascript定時器在客戶端定期發送ajax請求)

  3. 並通過ZK客戶端編程自定義繁忙屏蔽以添加取消按鈕。 (點擊該按鈕執行另一個Ajax請求)

    請參閱類似的文章在計算器: Override 「Processing」 in ZK

編輯:

有我博客的一些相關文章:

ZK: Customize the mask for showBusy

ZK: Adding abort button to busy mask

ZK: Mask page manually