可以删除zkoss Events.echoEvent吗?

时间:2012-12-27 14:13:41

标签: java zk

我试图做以下事情:

  1. 发送长执行请求(我在此使用Events.echoEvent
  2. 使用“取消”按钮
  3. 显示模态对话框(等待...)
  4. 如果用户按“取消”,则会隐藏对话框并且不应执行事件方法。
  5. 如果用户没有按下按钮并等待。调用event方法并关闭等待对话框
  6. 我该怎么做?

2 个答案:

答案 0 :(得分:2)

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

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

  1. 表示调用echoEvent
  2. 的原始请求
  3. 代表echoEvent
  4. 创建的新请求
  5. 表示用户点击“取消”时创建的请求
  6. 显然,第一个将在最后两个被调用的时候消失,但这是你需要考虑的问题才能解决你的问题。

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

    我会将你推荐给'How to stop threads in Java?',其中接受的答案赞成在线程上直接调用interrupt时分享某种“停止标志”。

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

答案 1 :(得分:1)

你可以尝试

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

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

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

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

  4. 编辑:

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

    ZK: Customize the mask for showBusy

    ZK: Adding abort button to busy mask

    ZK: Mask page manually