版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/86677036
Event(事件)
- 事件(org.zkoss.zk.ui.event.Event)用来通知服务器发生了什么。每种类型的事件都由一种不同的类来表示。
- 例如 org.zkoss.zk.ui.event.MouseEvent 来代表鼠标活动,如点击。
- 为了响应事件,服务器需要为其注册一个或多个事件监听器。由俩种方法来注册一个事件监听器。一种通过在标记语言中指定onXxx属性,另一种方法是为你要监听的组件或页面调用addEventListener方法。
- 除了在浏览器端由客户活动出发的事件,一个应用程序可以org.zkoss.zk.ui.event.Events类中的sendEvent和postEvent方法来触发事件。
桌面和事件处理
- 如上所述,桌面是页面的集合,这些页面服务于同样的URL请求。一个桌面当然是事件监听器能读取的范围。
- 当一个事件被触发时,它就和桌面联系在一起。ZK 分离基于关联桌面及流水事件(pipelines events)分成单独的队列。因此,同一桌面的时间可以被顺序处理。另一方面,不同桌面的时间可以被并行处理。
- 一个事件监听器是被允许读取事件关联桌面内任何页面的任何组件的。它也被允许将一个组件从一个页面移到另一个页面,只要这些页面在同一桌面内。另一方面,它不能读取到其它桌面组件。
注意:开发人员可以在一个事件监听器中将与各组件从一个桌面卸载,然后在另外的事件监听器中将其添加到另外一个桌面。
在实战项目中是如何使用的呢?
需求:
点击1页面的按钮跳转2页面,2页面有一个 Close 按钮,点击2页面 Close 关闭2页面,并刷新1页面的数据
1), 1页面后台 --> 首先 addEventListener 添加监听器
@Command
public void view(@BindingParam("this") Component component) {
Notification value = (Notification) component.getAttribute("id");
Window win = (Window) getUiBuilder().manufacture(
uiParameterBuilder
.setUri("xxx/跳转的页面")
//传递一个对象
.setArg(ARG_FORM_OBJECT, value)
.setParent(getSelf())
.build()
);
win.doModal();
//添加监听器
win.addEventListener(Events.ON_CLOSE, new NotificationEventListener());
}
2), 1页面后台 --> 实现这个监听器,写出具体要做的事情
private class NotificationEventListener implements SerializableEventListener<Event> {
@SuppressWarnings("unchecked")
@Override
public void onEvent(Event event) throws Exception {
refresh();
}
}
3),2 页面 后台-->在跳转窗口那个页面 Close 按钮触发的事件,执行这个刷新的方法,如下
@Command
public void close() {
//todo 所要做的更新操作
//执行刷新方法
Events.postEvent(new Event("onClose", this.getSelf()));
}