一、组件的生命周期
加载页面的生命周期:(1)页面初始化阶段-->(2)组件创建阶段-->(3)事件处理阶段-->(4)响应阶段。在阶段1,ZK处理被称为init的预处理指令,如果没有这样的指令存在,这一阶段将被跳过,注意:当页面初始化阶段执行时页面还没有被放到桌面上。在阶段2,ZK加载器解释ZUML页面,并创建和初始化组件,注意:开发人员可以通过监听onCreate或者实现org.zkoss.ui.ext.AfterCompose接口来完成某些特殊的任务。AfterCompose在组件创建阶段被调用,而onCreate是由事件监听器处理的。在阶段3,ZK为桌面上的时间队列逐个调用监听器,对于每个监听器将会启用一个独立的线程,因此某个监听器被挂起不会影响到其它事件的处理过程。在阶段4,在所有的事件被处理后,zk就会把这些组件以规则的HTML页面的形式发送到浏览器。为了发送一个组件,组件的redraw(java.io.Writer out)throws java.io.IOException方法会被调用,在这个方法中一个组件的实现(Implementation)不会更改其它组件的内容。
更新页面的生命周期:Zk AU引擎处理来自客户端的ZK请求分为三个阶段:请求处理阶段、事件处理阶段、响应阶段。在请求处理阶段,依据特定的请求ZK AU引擎有可能更新相关组件的内容,这样它们的内容就和客户端展示的内容相同了,然后ZK AU引擎把响应事件放到一个队列中;事件处理阶段与组件创建阶段中的事件处理是相同的,启动一个独立的线程逐个处理事件;在所有的事件处理完毕后,ZK就会重绘受影响的组件,生成相应的ZK响应并把这些响应发送到客户端,然后客户端引擎基于收到的响应更新浏览器端的DOM树。究竟是更新组件的整个视图还是只更新浏览器端中的属性取决于组件的实现,权衡交互性与简单性是组件开发者的责任。
二、组件的垃圾回收机制
一旦一个组件被分离了页面,它就不再被ZK管理了,如果应用程序也不再引用它,这个组件占用的内存会被JVM的垃圾收集器回收。
三、事件监听与处理
关于延迟监听器:默认情况下,在客户端产生的事件会被立即发送到服务器,但是也有一些事件监听器被用于保存服务器端的状态,而不是为用户提供视图响应,换句话说,这些监听器监听的事件不需要被立即发送。为了使得一个事件监听器可延迟,需要实现org.zkoss.zk.ui.event.Deferrable接口。
事件监听器的调用顺序(以onClick事件为例):1、调用被加入到目标组件上并实现了org.zkoss.zk.ui.event.Express接口的事件监听器的相应方法,先被加入的先被调用。Express接口是一个标记接口;2、如果需要调用目标组件上onClick属性指定的脚本;3、调用被加入到目标组件上并且未实现org.zkoss.zk.ui.event.Express接口的事件监听器的相应方法,先被加入的先被调用;4、调用目标组件上相应的成员方法(在这里是onClick方法);5、调用目标组件所属页面上注册的所有事件监听器的相应方法,先被加入的先被调用。
中断调用序列:可以调用org.zkoss.zk.ui.event.Event的stopPropagation方法中断调用序列,一旦调用了这个方法,随后的事件监听器将会被忽略。
四、线程模型
对于每一个桌面,事件被有序处理,是单线程的;就像开发桌面应用程序一样,开发人员无需考虑多线程的情况,所有要做的事情就是注册事件监听器并处理事件。
五、ZK用户界面标记语言
简介:zk用户界面标记语言(ZUML)是基于XML的,每一个XML元素描述了要创建的组件,一个XML属性描述了将要被创建的组件的初始值,一个XML处理指令描述了如何处理整个页面(如页面的标题),不同组件集通过XML命名空间来区分:(XUL:http://www.zkoss.org/2005/zul XHTML: http://www.w3.org/1999/xhtml)
可以用CDATA段来使XML解释器不要解释其中的文本,例如:<zscript><![CDATA[……]]></zscript>
XML注释:<!--注释内容-->
指定字符编码: <?xml version="1.0" encoding="UTF-8" ……?>(必须放在文件的第一行)
命名空间:xmlns="……" 指定一个命名空间,并用它作为默认的命名空间;xmlns:xx="……" 指定一个命名空间,并使用xx来呈现这个命名空间。
六、ZK隐含对象
对象名称 |
描述 |
self |
org.zkoss.zk.ui.Component组件本身 |
spaceOwner |
org.zkoss.zk.ui.IdSpace 组件的空间所有者 与self.spaceOwner相同 |
page |
org.zkoss.zk.ui.Page 页面 与self.page相同 |
desktop |
org.zkoss.zk.ui.Desktop 桌面 与self.desktop相同 |
session |
org.zkoss.zk.ui.Session 会话 |
application |
org.zkoss.zk.ui.WebApp Web应用程序 |
applicationScope |
java.util.Map 与org.zkoss.zk.ui.WebApp中的getAttributes()相同 |
requestScope |
java.util.Map 与org.zkoss.zk.ui.Execution中的getAttributes()相同 |
event |
org.zkoss.zk.ui.event.Event或派生类 事件 仅在事件监听器中可用 |
七、进程指令
Page指令:描述了页面的属性
Component指令:为某页面定义新的组件,使用此指令定义的组件仅对该指令所在的页面有效。为了定义所有页面中均可见的组件,可以使用附加语言插件(language addon)即一个XML文件,用来定义在web应用程序中所有页面都可以使用的组件,有两种方式:一种是宏,另一种是类。
init指令,有两种格式:一、指定一个类用来处理具体应用(application-specific)的初始化;二、指定一个zscript文件用于处理具体应用的初始化。
variable-resolver指令:为zscript解释器指定一个变量分解器(实现VariableResolver接口)用来分解未知变量,下面是zk结合spring的例子,它分解了在spring框架中声明的Java Beans,这样我们可以直接访问到它们。
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
import指令:引入在另一个zuml页面中的组件定义和初始化器,即从指定的页面引入component指令和init指令,注意:除了这两个指令外的其它指令均被忽略,以免混淆。其典型的应用是将一套组件定义在一个zuml页面中,然后在其它的zuml页面中引入,这样除了系统默认的,可以共享一套相同的组件定义。
八、zk属性
apply属性:指定一个类或一组类(逗号分隔)用以初始化组件,被指定的类必须实现org.zkoss.zk.ui.util.Composer接口,然后由于组件以及子组件初始化之后会调用doAfterCompose方法,所以我们就可以在这个方法内进行初始化。
use属性:指定一个类(代替默认的)来创建一个组件。
forward属性:将目标组件一个事件以其它事件名称跳转至另一个组件,例如
<window id="ww">
<button label="Submit" forward="onClick=ww.onOK"/>
</window>
九、组件集及XML命名空间
如前所述,zk使用xml的命名空间区分不同的组件集。但在多数情况下,某些页面仅仅使用一套组件,为了使得这样的组件更容易编写,zk以扩展名为基础决定了默认的命名空间,例如xul和zul意味着使用XUL命名空间,而对于html、xhtml则默认使用XHTML命名空间。
分享到:
相关推荐
从给定的文件信息来看,这是一份详细的ZK-AJAX学习笔记,记录了从准备环境、下载运行ZK到深入学习各个组件的过程。ZK是一款基于Ajax的开源Web应用框架,它允许开发者使用类似桌面应用的组件来构建Web应用,而无需...
4. **笔记**:个人笔记通常包含了开发者在学习和实践ZK过程中总结的经验和技巧,可能是解决特定问题的方法、性能优化建议或者对某些复杂概念的通俗解释。这些笔记对于初学者来说非常宝贵,能帮助他们避免常见错误,...
通过以上的Python与Zookeeper的学习笔记,我们可以全面了解如何在Python中利用Zookeeper进行分布式系统的管理和协调,并利用Xmind进行有效的知识整理和学习。无论是初学者还是经验丰富的开发者,都能从中受益,加深...
zk学习笔记
【Dubbo学习笔记】 Dubbo是一款高性能、轻量级的Java RPC框架,它旨在提供面向接口的远程方法调用、智能容错与负载均衡、服务自动注册与发现等核心功能,帮助开发者构建分布式服务架构。以下是对Dubbo基础知识、...
【HCIE-Cloud学习笔记】 华为的HCIE-Cloud认证专注于云计算领域的专业知识,涉及服务器虚拟化、云操作系统、私有云、桌面云等多个方面。在这些领域,FusionSphere是华为的核心产品,它包含了FusionCompute、...
综上所述,学习ClickHouse涉及其基本概念、数据类型、存储结构、SQL语法、副本和集群管理、查询优化等多个方面,为大数据分析提供了强大且高效的解决方案。掌握这些知识点将有助于构建和优化ClickHouse系统,实现...
### Zookeeper 学习笔记 #### 一、Zookeeper 简介与安装配置 **Zookeeper** 是一个分布式协调服务框架,它提供了一种高效可靠的机制来维护集群中的配置信息、命名服务以及提供分布式锁等功能,使得开发人员能够...
【标题】"zk.rar_zk" 提供的资源是关于"北京理工大学自动化原理"研究生入学考试的辅导笔记,这个压缩包文件很可能包含了该学科的重要学习资料。自动化原理是控制科学与工程领域的一个基础课程,主要研究如何使系统...
pytorch学习笔记(十五)————动量与学习率衰减目录动量学习率衰减 目录 动量 从形式上看, 动量算法引入了变量 z充当速度角色——它代表参数在参数空间移动的方向和速率。速度被设为负梯度的指数衰减平均。名称...
《从paxos到zookeeper分布式一致性原理与实践》书的源码以及自己学习时写的demo主要包括zk原生api的使用zkCl
本篇笔记主要围绕 Sqoop 的使用场景、安装步骤以及如何配合 Hive 和 Hbase 使用进行展开。 #### 二、数据传输流程设计 最初的设计方案是通过 Sqoop 将数据从 PostgreSQL 导入到 Kafka,再通过存储程序将 Kafka 的...
该文档对 Storm 的学习笔记,总结了 Storm 的架构、组件、工作流程等关键知识点。 一、Storm 架构 Storm 的架构主要由四个组件组成:Nimbus、Supervisor、Worker 和 Zookeeper。 * Nimbus:负责接收用户提交的 ...
A Wonderful learning-Java-Blog一套开发级JAVA设计语言学习笔记。所有笔记已更新于微信公众号<汀雨笔记>:red_heart:资源较多已同步到gitee: 2021-1-29 |:sparkles: 特性:rainbow: 鉴权-安全:gear: 操作系统:...
### Zookeeper概述 Zookeeper是一种分布式协调服务框架,它的核心任务是为用户的分布式应用程序提供一系列的协调...无论是从其提供的服务还是从其内部的机制来看,Zookeeper都是值得深入学习和掌握的重要技术之一。
【Linux基础篇】 Linux是开源的操作系统,深受...总之,这份华为工程师的Linux学习笔记全面覆盖了从基础到高级的Linux知识体系,适合从零开始学习Linux的人员,也能为有一定经验的工程师提供深入学习和提升的机会。
Zookeeper的源码结构清晰,包含了客户端、服务器端、协议处理、数据模型等多个模块,学习源码可以帮助理解其工作原理。 在实际应用中,Zookeeper经常与Hadoop、HBase、Kafka等大数据组件配合使用,提供高可用性和...
第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发...
本文档是工程师总结的Linux学习笔记,涵盖了Linux从基础入门到高级应用的全方位内容。 Linux快速入门部分主要介绍了Linux的基本概念、操作界面以及如何在虚拟机环境下进行Linux操作系统的安装。Linux发展及系统安装...
第15章到第38章学习内容分别包括:Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发...