java - ZK showBusy 在长时间操作之前调用,但在操作之后显示

标签 java zk

使用 Zk 6.5.11CE。

在模式窗口中,我有一个单击“发送电子邮件”的按钮。这是一个很长的操作,在等待时间我想使用 Clients.showBusy 来阻止用户单击/修改我的模式窗口。

这是 ZUL

<window apply="org.zkoss.bind.BindComposer"
        viewModel="@id('vm') @init('viewmodel.EventView')">
    ...fill the form...
    <button label="SEND" onClick="@command('send')" autodisable="self" />
</window>

这是 Java EventView.java

@Command
@NotifyChange("*")
public void send() {
    Clients.showBusy(winFather.getModalWin(), "Please wait...");
    // ... do something ...
    sendMail(); // it takes 2/3 seconds
    Clients.clearBusy(winFather.getWinEvent());
}

其中 winFather 是调用模态窗口的 win(我的主页),而 getModalWin() 获取模态窗口,其中我遇到了 showBusy 问题。希望很清楚:)

但是,我在网上搜索并发现了一些有趣的东西 herehere 。所以我必须使用 Echo Events。

对于那些没有点击链接的人:

<window id="w" width="200px" title="Test echoEvent" border="normal">
  <attribute name="onLater">
    doLongOperation(); //take long to execute
    Clients.clearBusy(); //remove the busy message
  </attribute>
  <button label="Echo Event">
    <attribute name="onClick">
      Clients.showBusy("Execute..."); //show a busy message to user
      Events.echoEvent("onLater", w, null); //echo an event back
    </attribute>
  </button>
</window>

问题:

  1. Echo Events 是解决问题的唯一机会吗?或者我可能忘记做一些事情来使 showBusy 正常工作?
  2. 因为我真的不想在我的 zul 页面中添加代码,所以我如何在我的 viewModel 中定义这些内容?

如果我分配绑定(bind)值

disabled="@load('vm.busy')"

我想在电子邮件发送期间禁用的所有组件,并用客户端 showBusy 和clearBusy 替换

busy = true; // Clients.showBusy(winFather.getModalWin(), "Please wait...");
...
busy = false; // Clients.clearBusy(winFather.getModalWin());

我遇到了同样的问题,电子邮件是在 zul 组件被禁用之前发送的。看来是同步问题。

最佳答案

hi i had same problem before , in my code you can see that I've override onClientInfo on my target component,so if you call this event , you can reach your goal.

@Listen("onClick = #addRejectDocumentBtn")
public void openWaiting() {
    Clients.showBusy(saleRejectMainPageWin,"please wait...");

    saleRejectMainPageWin.addEventListener(Events.ON_CLIENT_INFO, new EventListener<Event>() {
        @Override
        public void onEvent(Event event) throws Exception {
            LongOperationExample();      <- here is my long operation                

            Clients.clearBusy(saleRejectMainPageWin);
        }
    });


    "Here you can call the event" 
    Events.echoEvent("onClientInfo", saleRejectMainPageWin, null);

}

关于java - ZK showBusy 在长时间操作之前调用,但在操作之后显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18556872/

相关文章:

grid - ZK网格滚动条问题

java - 使用带有 fragment 的工具栏

java - Activity 和语音识别

java - BlobstoreService 的 HttpSession Null

java - 为什么 PrintStream "out"和 InputStream "in"为空?

hibernate - 如何修复此 "no persistent classes found for query class"消息?

java - ZK MVVM 中的表单验证(服务器端)示例

java - ZK 8 MVVM 子对象的绑定(bind)属性 - 没有更改通知?

java - NetworkOnMainThreadException 即使在实现 AsyncTask 之后

widget - zk:什么时候创建widget子?