Interface EventThreadInit
How this interface is used.
- First, you specify a class that implements this interface in WEB-INF/zk.xml as a listener.
- Then, even time the engine (in the main thread) is about to process
an event, it creates a new instance of the specified class, invokes
prepare(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event), and then pass it to the thread processing thread. - After the thread processing thread is resumed, it invokes
init(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event)to do the initialization.
In other words, prepare(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event) is called in the servlet thread, while
init(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event) is called in the event processing thread.
Therefore, the typical use is retrieving thread-relevant info in
prepare(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event), and then
apply them in the event processing thread when init(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event) is called.
- Author:
- tomyeh
-
Method Summary
-
Method Details
-
prepare
Prepares the initialization at the servlet thread.It is invoked in the servlet thread (and before
init(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event)). Thus, you can NOT manipulate the desktop in this method.If this method throws an exception, it will abort the execution and shows an error message to the end user. Note:
EventThreadCleanup.cleanup(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event, java.util.List<java.lang.Throwable>)won't be called if an exception is thrown in this method, since it executes in the main thread.In addition to throwing an exception, you can prevent an event from processing by returning false in
init(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event). The event is ignored 'silently' then.- Throws:
Exception
-
init
Initialize the event processing thread before processing the event.The simplest form is
void init(Component c, Event e) {return true;}Unlike
prepare(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event), it is invoked in the event processing thread (and afterprepare(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event)). Thus, you can manipulate the desktop in this method such as creating a component.If you want to prevent an event from processing, you can return false in this method. For example, you might create a highlighted window and return false to prevent the user from accessing, if the system is too busy.
If the use of the event thread is disabled (
Configuration.isEventThreadEnabled()returns false), this method is also invoked in the Servlet thread.If this method throws an exception, it will abort the execution and shows an error message to the end user (unless it is cleaned up by
EventThreadCleanup.cleanup(org.zkoss.zk.ui.Component, org.zkoss.zk.ui.event.Event, java.util.List<java.lang.Throwable>)).- Returns:
- if it is initialized successfully. If false is returned, the event is ignored, i.e., no event handler/listener will be invoked.
- Throws:
Exception
-