组件(component)是一种用户接口(UI)对象,如一个标签、按钮、树。

        页面(page)是一个组件的集合。
        桌面(desktop)是一个包含相同URL请求的页面。
 
4.1、ZUML页面的生命周期
 
(1) 页面初始化阶段
        ZK会运行一个叫做init的处理指示。如果没有定义这样的处理指示,就会跳过这个(初始化阶段)。
        对于每个init处理指示,都有一个class属性,在其中会创建一个指定类的失利,并调用她的doInit()方法。<?init class="MyInit"? >指定了MyInit类作为页面的初始化类。这个类的处理依赖于你的应用程序的需求。
      另一种传递init处理指示的方式是,制定一个zscript文件。<?init zscript="/my/init.zs"?>,那么会在页面初始化阶段对这个zscript文件进行解析。
          当执行页面初始化阶段时,并没有在桌面中添加页面。
 
(2)组建创件阶段
        ZK加载器解析ZUML页面,创建并初始化组件。
        a、对于每个元素而言,ZK加载器检查if和unless属性,判断它们是否为true。如果不是,就会忽略这个元素及他的子元素。
      b、对于一个集合而言,如果指定了forEach属性,ZK将为集合中每个集合项一次执行以下步骤c~g。
        c、ZK加载器根据元素名称或类中指定的use属性,参加一个组件。
        d、按照顺序一个个地初始化组件类的成员,并在ZUML页面中指定属性。
        e、ZK加载器解析到任意嵌套元素,就重复整个过程。
        f、如果组件实现了org.zkoss.zk.ui.ext.AfterConpose接口,加载器将调用afterCompose()方法。
      g、创建完所有子元素后,将发送onCreate事件给该组建,这样应用程序就能够接着初始化剩下的元素内容。子组件首先提交onCreate事件。
 
(3)事件处理阶段
        在时间处理阶段中,zk一次调用桌面队列(queue)中每个事件监听器。每次调用监听器都会使用一个独立的线程,因此它能够进行自动悬挂式运行,而不影响其他事件的处理。
        在处理过程中,一个事件监听器可能会触发另外的事件。
 
(4)回填阶段
        处理完所有的事件后,ZK将所有的组件会天到一个有规则的HTML页面中,并将该页面发送给浏览器。要回填组件,需要调用redraw()方法。
        redraw()方法不会改变组件的任何内容。
 
4.2 更新页面
    ZK异步更新引擎将请求以管道的形式添加到队列中,并未每个桌面创建一个队列。因此,同一个桌面的请求会按顺序进行处理,不同的桌面请求会并发进行处理。
 
(1)请求处理阶段
        ZK异步更新引擎可能会根据请求中的要求来更新相关的内容,这样,这些组件和显示在客户端的内容保持一致。然后,ZK异步更新引擎将相关的事件提交到队列中。
 
(2)事件处理阶段
        这个阶段和加载ZUML页面的时间处理阶段采用同样的方式。他一次处理事件,并且对每个事件的处理使用独立的线程。
 
(3)回填阶段
        处理完所有事件后,ZK传送已更新的组件,生成相应的ZK响应,并将这些响应信息发送会客户端。客户端引擎根据这些响应信息更新浏览器中DOM树。
 
4.3 组件垃圾回收
        ZK的每个组件并没有destroy()或close()方法。只要从页面上卸载了组件,就应该从浏览器中删除了该组件。一个页面一旦卸载了一个组件,如果应用程序没有任何指向它的引用,那么ZK将不再对其负责管理。而组件分配的内存将通过Java虚拟机(JVM)的垃圾收集器进行释放。
      
4.4 使用组件的属性
4.4.1 组件id,if,unless
        组件一般使用的属性是id,它为组件分配一个唯一的标识符。可以在if或unless属性中制定相关语句,来决定是否创建组件,而且也可以使用forEach属性来决定要创建的组件数量。同时,也可以使用use属性将组件赋值给另一个Java类,这样可以替换原来默认的Java类。
        if和unless属性定义true或false,可以用来判断是否创建组件。如果为组件指定了这两个属性,那么只有这两个属性均为true时才创建该组件。
 
4.4.2 组件的forEach属性
        组件的forEach属性用来决定创建多少个组件。若为一个集合对象指定了该属性,zk加载器将会为该集合内的每一个条目创建一个组件。
 
4.4.3 组件use属性
        将UI部分代码和控制处理的代码进行分离,可以减轻维护的负担。试图分离常见两种方式:
        将控制代码放到一个单独的类中,然后注册事件监听器来调用和公司的方法。
            另一种方式是使用use属性指点过一个类来取代默认的组件类。
<window use="MyWindow" />
 
 
 
 

ZK框架笔记4、通用组件、页面、桌面的更多相关文章

  1. ZK框架笔记1、ZK Ajax框架简介

    简介    ZK是一个基于事件驱动和组件的框架,他为web应用提供了丰富的接口.zk包括一个基于Ajax的事件驱动引擎.一整套丰富的XML用户接口语言(XML User Interface Langu ...

  2. ZK框架笔记3、窗体组件

    <window title="My First window" border="normal" width="200px" closa ...

  3. ZK框架笔记2、ZK框架安装、相关类库、web及zk配置

    1.先去ZK官网注册一个账号 2.在MyEclipse菜单栏中Help----Eclipse Marketplace中搜索ZK Studio,点击install安装即可         3.相关类库 ...

  4. ZK框架笔记5、事件

            事件是org.zkoss.zk.ui.event.Event类,它通知应用程序发生了什么事情.每一种类型的事件都由一个特定的类来表示.         要响应一个事件,应用程序必须为事 ...

  5. Unityclient框架笔记二(组件实体开发模式的思考)

    Unity的Entity-Component-System实现的很美丽,很灵活.许多文章也对这样的组件实体的开发模式倍加推崇.由于它契合这么一条规则:优先使用组合而不是继承. 可是实际开发过程中,限制 ...

  6. 饿了么基于Vue2.0的通用组件开发之路(分享会记录)

    Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...

  7. ZK框架的分析与应用

    前言:本文是在下的在学习ZK官方文档时整理出来的初稿.本来里面有很多的效果图片和图片代码的.奈何博客园中图片不能粘贴上去,所以感兴趣的筒子们就将就吧.内容中,如有不好的地方,欢迎斧正! ZK框架的分析 ...

  8. Vue2.0的通用组件

    饿了么基于Vue2.0的通用组件开发之路(分享会记录)   Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库. ...

  9. Web桌面应用框架2:著名的WEB桌面应用分析

    前一篇文章里,分析了包括NW.js和electron这种纯JS框架在内的几种Web桌面应用开发方式,实际上还有一种最古老的方式,那就是嵌入WebView的方式. 嵌入WebView的方式和整个程序都是 ...

随机推荐

  1. 洛谷——P2384 最短路

    P2384 最短路 题目背景 狗哥做烂了最短路,突然机智的考了Bosh一道,没想到把Bosh考住了...你能帮Bosh解决吗? 他会给你10000000000000000000000000000000 ...

  2. 简单说明CentOS源码安装程序

    第一步.安装依赖包.一般官网会有依赖关系,没有就网上搜索一下. 第二步.下载源码包,上传至CentOS服务器 第三步.解压缩 第四步.进入源码文件夹 第五步.执行./configure,这一步主要是为 ...

  3. Hive的严格模式

    在hive里面可以通过严格模式防止用户执行那些可能产生意想不到的不好的效果的查询,从而保护hive的集群. 用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成u ...

  4. 【位运算】【BFS】移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2246  Solved: 1246[Submit][Stat ...

  5. 【预处理】【分类讨论】Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains

    分几种情况讨论: (1)仅用C或D买两个 ①买两个代价相同的(实际不同)(排个序) ②买两个代价不同的(因为买两个代价相同的情况已经考虑过了,所以此时对于同一个代价,只需要保存美丽度最高的喷泉即可)( ...

  6. Windows下编译protobuf v3.3.0

    一:概述 关于 protobuf 在此不再多说,此处记录下成功编译步骤以备日后查阅.注意:本文并不是使用cmake gui进行编译的,如果熟悉cmake gui的话,也可以使用gui进行生成编译. 二 ...

  7. Codeforces Round #345 (Div. 1) D. Zip-line 上升子序列 离线 离散化 线段树

    D. Zip-line 题目连接: http://www.codeforces.com/contest/650/problem/D Description Vasya has decided to b ...

  8. Tomcat监控—Status页面

    原文:http://jingyan.baidu.com/article/925f8cb8f3d925c0dce05677.html 修改配置文件tomcat-users(该文件在Tomcat安装程序根 ...

  9. oracle 性能优化建议

    原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHER ...

  10. Spring事务管理笔记

    事务的目的就是要保证数据的高度完整性和一致性. 在实际的项目中,大多都是使用注解的方式来实现事物,这里也就简单记录下使用@Transactional方法和注意事项. 在xml中添加配置 1234567 ...