1

我正在尝试执行以下操作:

  1. 发送长执行请求(我在这里使用Events.echoEvent
  2. 使用“取消”按钮显示模式对话框(等待...)
  3. 如果用户按下“取消”,对话框将被隐藏并且不应执行事件方法。
  4. 如果用户不按下按钮并等待。事件方法被调用并关闭等待对话框

我怎样才能做到这一点?

4

2 回答 2

2

ZK 通常在单个线程中为服务器上的单个请求完成所有工作。Events.echoEvent让您通过完成请求,然后立即在一个全新的请求(和线程)中回调服务器来解决这个问题。用户与客户端的交互会触发一个新请求,因此这也将是一个新线程。

因此,在上面的示例中,您将使用三个线程:

  1. 对于调用的原始请求echoEvent
  2. 对于由创建的新请求echoEvent
  3. 对于用户单击“取消”时创建的请求

显然,当最后两个被调用时,第一个将早已不复存在,但这是您需要考虑的问题才能解决您的问题。

你会在 StackOverflow 上找到很多关于让两个线程进行交互的讨论,或者更具体地说,让一个线程中断另一个线程。

我将向您推荐“如何在 Java 中停止线程?” 接受的答案倾向于共享某种“停止标志”而不是直接调用interrupt线程。

在您的场景中,这将在长时间运行的过程中发挥作用,同时定期检查停止标志(一个简单的boolean)。当用户单击“取消”时,您只需将标志翻转为true.

于 2012-12-27T14:44:41.483 回答
1

你可以试试

  1. 创建一个线程来做上面提到的Sean的长操作(这是一个独立的线程,不是ZK请求线程)

  2. 创建一个计时器以定期检查该线程的状态。(这将创建一个 javascript 计时器以在客户端定期发送 ajax 请求)

  3. 并通过 ZK 客户端编程自定义忙掩码,添加取消按钮。(按钮单击执行另一个 ajax 请求)

    请参考 stackoverflow 上的类似文章: Override “Processing” in ZK

编辑:

在我的博客中有一些相关的文章:

ZK:为 showBusy 自定义掩码

ZK:在忙掩码中添加中止按钮

ZK:手动屏蔽页面

于 2012-12-29T12:30:40.400 回答