ZK留言箱确认

时间:2016-10-02 17:14:03

标签: java zk

我使用ZK并发现了一些奇怪的行为。代码:

@Listen("onClick = button#load")
public void load() {
    int result = Messagebox.show("Are you sure to execute Load?", "Execute?",
            Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
    log.debug("Result: {}", result);
    if (result == Messagebox.YES) {
        (new Thread(new Job("Load"))).start();
        message.setValue("Job " + "Load " + " is Executed at " + new Date());

        log.info("Load Called");
    } else {
        log.debug("Load Not Called");
    }
}

单击,它将返回1作为int。日志:

 02-Oct-2016 23:59:31.725 FINE [http-nio-8080-exec-1] com.Controller.load Result: 1
 02-Oct-2016 23:59:31.726 FINE [http-nio-8080-exec-1] com.Controller.load Load Not Called
 02-Oct-2016 23:59:39.541 FINE [http-nio-8080-exec-6] com.Controller.load Result: 1
 02-Oct-2016 23:59:39.542 FINE [http-nio-8080-exec-6] com.Controller.load Load Not Called

如何正确使用?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的ZK?

javadoc说:

  

@return按下按钮({@link #OK}之一,{@ link #CANCEL},   {@link #YES},{@ link #NO},{@ link #ABORT},{@ link #RETRY}和{@link #IGNORE})。

     

注意:如果禁用事件处理线程,它将始终返回   {@link #OK}。

但是如果你检查关于事件处理线程的documentation,它会说:

  

[因为ZK 7.0.0已弃用以根据Java Servlet规范启用可能禁止创建新线程的事件线程]

因此,应该通知ZK更新其javadoc,就像使用ZK7或8一样,该方法将立即返回1。

要回答您的问题,如果您想根据点击的按钮调用特定操作:

@Listen("onClick = button#load")
public void load() {
    Messagebox.show("Are you sure to execute Load?", "Execute?", Messagebox.YES | Messagebox.NO, 
        Messagebox.QUESTION, new EventListener<Event>() {
            @Override
            public void onEvent(final Event evt) throws InterruptedException {
                if (Messagebox.ON_YES.equals(evt.getName())) {
                    // Code if yes clicked
                } else {
                    // Code if no clicked
                }
            }
        }
    );
}