2016-10-02 103 views
1

我正在使用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

您正在使用哪个版本的ZK?

的Javadoc说:

@返回被按下的按钮({@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 
       } 
      } 
     } 
    ); 
} 
+0

是的,我已经修改为使用事件侦听器。也许我读了一个较旧的文档。 –