论坛首页 Web前端技术论坛

ZK 3.6.4和5.0.2版本servlet线程与事件处理线程的配置区别

浏览 5385 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-06-22  

 


默认情况下,ZK的过程中一个独立的线程的事件称为事件处理线程。因此,开发人员可以暂停,恢复在任何时间执行,没有阻止发回的响应到浏览器的servlet线程。但是异常情况下的很多个servlet线程被挂起的时候,将严重消耗我们服务器的cup内存,所以zk提供了个一个可以禁用事件处理线程的使用,换句话说,你可以强制ZK的处理像其他传统的Servlet线程框架的所有事件。当然,如果Servlet的线程正在执行,你就不能暂停。 
要禁用的事件处理线程使用,您必须指定以下内容 WEB-INF/zk.xml. 

<system-config>    <disable-event-thread>true</disable-event-thread> 
    </system-config>



这里是优点和有关使用Servlet的线程来处理事件的局限性 
  使用Servlet的线程 使用事件处理线程
Integration 减集成问题。多容器承担的HTTP请求是在servlet线程处理。 您可能需要执行 EventThreadInit和/或 EventThreadCleanup解决一体化问题。ZK的和社会继续提供多功能一体化的实现来解决问题。
SuspendResume 没办法暂停执行的事件监听器。举例来说,你不能创建一个模式窗口。 

没有限制的。 


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


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


这两种的区别: 

等于false时,启用事件处理线程,等于true时禁用事件处理线程 


启用时,zk创建本地事件处理线程,处理弹出模式窗口,当弹出窗口时,等待用户操作,代码停止执行, 
用户操作完毕后,继续执行代码 
禁用时,zk弹出模式窗口使用servlet线程统一处理,代码执行完毕后,弹出窗口,

if (Messagebox.show("Delete?""Prompt", Messagebox.YES|Messagebox.NO, Messagebox.QUESTION) == Messagebox.YES) {this_never_executes(); } 
this_never_executes();//事件处理线程被启用时方法不会被执行. 


MessageBox.show(.....);//注册一个事件监听器,同样能处理这样的问题. 
Messagebox.show("Delete?""Prompt", Messagebox.YES|Messagebox.NO, Messagebox.QUESTIONnew EventListener() { public voidonEvent(Event evt) { switch (((Integer)evt.getData()).intValue()) { case Messagebox.YES: doYes(); break; //the Yes button is pressed case Messagebox.NO: doNo(); break; //the No button is pressed } } } ); 

 

   发表时间:2010-09-14  
改成<disable-event-thread>false</disable-event-thread> 之后
window.domodal出错...
0 请登录后投票
   发表时间:2010-09-15  
IcedCoffee 写道
改成<disable-event-thread>false</disable-event-thread> 之后
window.domodal出错...

什么错误??
0 请登录后投票
   发表时间:2010-09-20  
org.zkoss.zk.ui.SuspendNotAllowedException: doModal must be called in an event listener 

Window win = (Window) Executions.createComponents("login_window.zul", login, null);
win.doModal();
0 请登录后投票
   发表时间:2010-09-20  
IcedCoffee 写道
org.zkoss.zk.ui.SuspendNotAllowedException: doModal must be called in an event listener 

Window win = (Window) Executions.createComponents("login_window.zul", login, null);
win.doModal();

你肯定是在线程中调用了doModal()方法,  建议你放到onCreate()放法中 调用,页面初始化
然后创建组件  然后才是事件处理阶段   你现在直接在创建阶段就调用方法了
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics