zk5.0.2与zk3.6.4中事件处理线程配置区别

zk5.0.2与zk3.6.4中事件处理线程配置区别

 

 

在zk5以前的版本中,以下配置默认为false,而在zk5以后默认为true(zk.xml文件中)

 

 

<system-config>

<disable-event-thread>false</disable-event-thread>

</system-config>

 

 

 

这两种的区别:

 

disable-event-thread等于false时,启用事件处理线程,等于true时禁用事件处理线程

 

 

启用时,zk创建本地事件处理线程,处理弹出模式窗口,当弹出窗口时,等待用户操作,代码停止执行,

             用户操作完毕后,继续执行代码

禁用时,zk弹出模式窗口使用servlet线程统一处理,代码执行完毕后,弹出窗口,

 

 

 

例如:

 

<textbox id="txtUsername"/>

 

<textbox id="txtPassword"/>

 

<button label="提交" forward="onLogin"/>

 

 

 

后台代码

 

        private Textbox txtUsername;
	private Textbox txtPassword;

	public void onLogin(Event event) {
		if (StringUtils.isBlank(txtUsername.getText())
				|| StringUtils.isBlank(txtPassword.getText())) {
			try {
				// 1
				Messagebox.show("帐户或者密码为空!", "提示", Messagebox.OK,
						Messagebox.INFORMATION);
				// 2
				System.out.println("事件处理线程:启用时,需点击ok才会执行我,禁用时,立即执行我");
				return;
			} catch (InterruptedException e) {
			}
		}
		System.out.println("#####");
	}
 

 

 

当disable-event-thread=false时,启用事件处理线程,代码运行到1处时,弹出窗口,事件处理线程挂起,等待用户操作,当用户点击ok时,继续执行2处代码

当disable-event-thread=true时,禁用事件处理线程,1和2立即顺序执行,并弹出窗口

 

 

如3处代码永远不会执行,

 

if (Messagebox.show("Delete?", "Prompt", Messagebox.YES|Messagebox.NO,

     Messagebox.QUESTION) == Messagebox.YES) {

 

     this_never_executes();//3

 }

 

 

在zk5.0.2中解决办法,给当前窗口注册一个事件监听器。在事件中,使用

 

event.getData返回的int值与Messagebox.OK

或Messagebox.CANCEL比较判断用户点击的按钮,然后进一步处理

 

 

 

 

try {
			Messagebox.show("禁用事件处理线程测试,是或否", "提示", Messagebox.OK
					| Messagebox.CANCEL, Messagebox.QUESTION,
					new EventListener() {
						@Override
						public void onEvent(Event event) throws Exception {
							Integer result = (Integer) event.getData();
							if (result == Messagebox.OK) {
								System.out.println("用户选择了yes");
							} else {
								System.out.println("用户选择了no");
							}
						}

					});
		} catch (InterruptedException e) {
		}
 

 

 

了解更多信息点击 使用Servlet 线程处理事件

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(thread,xml,servlet,zk)