ZK应用流程
一: (先是根据一个URL请求,初始化一个页面)
基于用户的请求,ZK 加载器(ZK loader)加载一个ZK页面,解释它,并将结果送到HTML页面来响应URI请求。
ZK页面是用一种被称为ZUML的标记语言写成的。ZUML,就像HTML,被用来描述什么组件被创建,以及如何把它们呈现出来。这些组件一旦被创建,就会一直处于可用状态直到会话超时。
二:(页面显出出来以后,页面的各种事件操作,带来的客户端和服务器端的交互)
然后ZK AU引擎(ZK AU Engine )和ZK客户端引擎(ZK Client Engine)作为投手和捕手一起工作。
它们将在浏览器端发生的事件送到运行在服务器端的应用程序,然后更新浏览器段的DOM树,基于组件如何被应用程序操纵。这种方式即所谓的事件驱动编程模型。
执行过程:::::
执行流
当用户在浏览器中键入一个URL或点击一个超链接时,一个请求便被送到了Web服务器,如果URI符合ZK的配置,ZK 加载器开始发挥作用 。
ZK 加载器(ZK loader)加载指定的页面然后解释它,以据此创建合适的组件。
默认(即没有指定fulfill)情况下,当ZUML页面被加载时,子组件会在父组件之后被创建。 如果你想推迟子组件的创建,你可以通过fulfill属性指定条件。
条件:1、用事件名称,2、目标组件的标识或路径
例如:
使用URI表达式:
<button id="b" label="open"/>
<div id="d" fulfill="b.onClick=/my/super.zul"></div>
ZK加载器会创建定义在URI内的组件,并像子组件一样分配它们。为了创建定义在指定URI内的组件,ZK实际上调用了定义在Executions内的createComponents方法。
例如,在上面的例子中,当按钮被按下时,ZK加载器会调用Ecutions.createComponents("/my/super.zul", d, null)来为d div 创建子组件。
<div fulfill="=/my/super.zul">
<combobox/>
</div>
若没有指定事件表达式,在分配所有的属性及创建所有的子组件之后,ZK加载器会立刻创建组件。在下面的例子中,ZK会首先创建combobox,然后创建定义在/my/super.zul内的组件。
当解释完整个页面后,ZK 加载器(ZK loader)将结果送到一个HTML页面。然后这个HTML页面被送回浏览器和ZK客户端引擎(ZK Client Engine)一起。
ZK客户端引擎(ZK Client Engine)位于浏览器,以监视由客户的活动触发的事件,例如挪动鼠标,或改变某个值。一旦监测到,它就通知ZK AU引擎通过发送一个ZK请求。
当从客户端引擎接到ZK请求后,如果有需要的话AU引擎就更新相应组件的内容。然后,AU引擎通过调用相关的事件处理程序(如果有的话)来通知应用程序。
如果应用程序选择改变组件的内容,添加或移动组件,AU引擎通过ZK响应(ZK responses)将更新后组件的新内容送至客户端引擎。
这些ZK响应实际上是一些命令,这些命令指示客户端引擎如何更新DOM树的内容
ZK 加载器 (ZK loader) 加载并解释页面需要经历四个阶段:页面初始阶段,组 件
创建阶段,事件处理阶段及响应阶段 (the Page Initial Phase, the Componen t
Creation Phase, the Event Processing Phase, and the Rendering Phase) 。
如果你手动创建所有组件 , 则没有页面初始阶段。
1. 页面初始阶段
在这个阶段, ZK 处理处理指令,被称为初始化 ( init处理指令,此阶段会被跳过。
对于每个 init 处理指令都有一个 class 属性,一个会被创建,然后它的 doInit 方法将会被调用。当然的应用程序的需求。
形式一<?init class="MyInit"?>
初始处理指令的另一种形式是使用 zscrtpt 属性指定
那么在页面初始阶段这个文件将会被解释。
形式二<?init zscript="/my/init.zs"?>
请注意在这个阶段页面并没有被附加到桌面(个人理解:zuml页面和java的融合)。
2.组件创建阶段
在这个阶段, ZK 加载器 (ZK loader) 解释一个 ZUML 页面,它创建并初始组件。
这需要以下的一些步骤:
1. 对于每个元素,它检查 if 和 unless 以确定元素是否有效。如果无效, 此
元素及其所有的子元素将 会被忽略。
2. 如果 forEach 被指定并伴随着一个项目的集合, ZK 将会为集合中的每个
项目重复以下步骤。
3. 基于元素名字,或使用 use 属性指定的类 ( 如果有的话 ) 创建一个组件。
4. 基于在 ZUML 页面属性指定的顺序依次初始成员。
5. 解释嵌套的元素 (nested elements) 并重复整个过程。
6. 调用 afterCompose 方法如果组件实现了org.zkoss.zk.ui.ext.AfterCompose 接口。
7. 在所有的组件都被创建后, onCreate 事件被送到该组件,这样之后应用
程序可以初始划化一些元素的内容。注意, onCreate 事件首先为子组件
公布。
[ 注 ]: 开发人员可以通过监听 onCreate 事件或实现 AfterCompose 接口来完成 一
些特定应用程序的初始化。 AfterCompose 在组件创建阶段 (the Component
Creation Phase) 被调用,而 onCreate 事件是由事件监听器来处理的。一个事 件
监听器者可以自由地挂起或恢复执行 ( 例如创建对话框 (modal dialogs)), 而由
于 AfterCompose 不需要派生另一个线程, 所以它快一些。
3.事件处理阶段
在这个阶段, ZK 依次调用每个事件的监听器,这些事件已经为桌面排好队列。
一个独立线程开始调用监听,这样它可以在不影响其它事件处理的情况下被挂
起。在处理过程中,一个事件可能引发其它事件,事件监听和处理 (The Event
Listening and Processing)
4. 响应阶段
在所有的事件都被处理后, ZK 将这些组件组成一个规则的 HTML 页面并将这个 页
面送到浏览器。为了发送一个组件, redraw 会被调用。在这个方法中,一个组件的实现
(implementation) 并不会更改其它组件的内容。
相关推荐
zk-6.5.0.zip ZK 6.5.0 Sep 12, 2012 * Features ZK-447: The file upload allows users to drag and drop local files (HTML5) ZK-1241: ZK Client Widget support swipe event for tablet/mobile device ZK-...
TPC-ZK-II微机接口实验系统正是在这种背景下推出的,该设备在TPC-ZK-II微机接口实验系统上配置了USB接口模块,直接与主机(PC)的USB接口连接,形成了一套完整的USB总线接口的微机接口实验系统。
学习微机程序软件 中文的!
中控智慧设备说明书
zk-bin-7.0.3.zip
该源代码对应本人博文《zk-SNARKs实战:使用circom和snarkjs实现简单版的Tornado(含源码)》,如要看该文章,可直接在百度中根据题目搜索
SMC ZK2-ZSEA-A设置方法
zk-sniffer:使用golang嗅探和解析ZooKeeper数据包
zk-snark的双线性对的国密化方案,张旭霞,黎琳,近年来,随着人们对隐私保护的重视,零知识证明技术也得到了迅速的发展。zk-snark是一种简洁的非交互式的零知识证明协议,其中双线�
zk-smoketest, zk smoketest.py 为ZooKeeper集成提供了一个简单的smoketest客户端 ZooKeeper Smoketest作者:Patrick ( 请关注我的 Twitter )摘要这个项目提供了一个简单的客户端,用于一个ZooKeeper集成。...
本文件与zk_studio0.9.3配套,本来想传0.9.4的但是太大了我传不了那么大的
zk-src-5.0.7.1(zk源码)呗
ZK开发使用的jar包,这里提供的是最新版本的。你可以下载它来开发自己的web应用程序。
zk-Gmaps-src-2.0_10.zip zk-Gmaps-src-2.0_10.zip
zk-javadoc-5.0.5
zk-src-3.0.3-2008-01-31
这是ZK3.6的bin文件,在Eclipse下进行部署就可以应用了!
ZK官方网站上的最新版本3.6.0的所有发布的zk_doc 包括zk-javadoc-3.6.0,zk-zss,zk-Spring,zk-JspTags,zk-JSFComps,zk-FCKeditor,zk-Gmaps等等,目前最全的,自已做了一个完整版,打包成chm,供给大家使用.
zk的的前台页面源码 方便的完成了页面美化 和后台的通讯 很好用
这是一个zkjar包,如何想实现报表或者饼状图等,可以用此包实现