一、标识符
每个组件都有一个标识符(getId()方法可获得),当组件被创建时标识符被自动创建,开发人员可以在任何时候改变它,对于标识符的命名规则也没有限制。但如果有序的标识符被标识后,Java开发人员就可以在嵌套在ZUML页面的Java代码或者EL表达式中直接访问它。
二、ID空间
一个ID空间是一个桌面的组件的子集,唯一性只在ID空间只能得到保障。如果X、Y都是ID空间,且X是Y的后代,那么X的空间所有者是Y的一部分,但是X的后代并不是Y的一部分。
例如:
在上图中定义了三个空间:P、A、C,其中P空间包括P、A、F、和G;A空间包括A、B、C和D;C空间包括C和E。
属于同一个ID空间的组件被成为伙伴:如A、B、C和D。
需要注意的是,尽管P、A、F和G同属于空间P,但是它们的空间所有者是不一样的,P、F、G的空间所有者是P,而A的空间所有者是它自己本身,原因在于A本身也是一个ID空间。
下面是ZK官方文档中的一段描述(也就是IdSpace的Javadoc):
在同一个ID空间中,每个组件的ID(Component.getId())都必须是唯一的,并且通过调用对实现了IdSapce的组件调用getFellow(java.lang.String)方法,我们可以找回在同一个ID空间里的任意一个组件。
为了便于描述,在同一个ID空间里的组件互相被成为伙伴,如果组件有一个实现了IdSpace的祖先,我们就说这个组件属于它的这个祖先所拥有的ID空间。如果没有这样的祖先存在,那么这个组件就属于它所在的页面所拥有的ID空间,因为页面本身就实现了IdSpace,并且如前所述的祖先和页面被称作空间所有者(Component.getSpaceOwner())。
为了便于描述,如果组件X或者页面X是空间所有者,我们就把它们标识的空间称作X空间。在这种情况下,如果组件Y是X的孩子并且组件Y也实现了IdSpace(另一个空间所有者),那么空间X包含组件Y但是不包含Y的后代。换句话说,Y属于空间X和空间Y,因而为了得到Y空间的孩子Z,我们应该这样:X.getFellow('Y').getFellow('Z')。
三、在zscript中定义变量和函数
在zscript中定义的变量和函数被存储在相应脚本语言的解释器中。
关于解释器:解释器分为单域解释器和多域解释器,Java解释器(BeanShell)是一个典型的多范围解释器,它为每个ID空间创建一个独立的解释范围。故而在下面的例子中var2只对B窗口可见,var1对A、B窗口均可见。
<window id="A">
<zscript>var1="abc";</zscript>
<window id="B">
<zscript>var2="efg";</zscript>
</window>
</window>
单域解释器,Ruby、Groovy、Javascript解释器目前不支持多域,下一个版本将支持。这就意味着在这种类型的解释器中,在一个窗口中定义的变量会覆盖在同一个页面中另一个窗口中定义的同名变量,当然我们应该避免出现这种情况。
四、zk中的事件
为了响应事件,应用程序必须注册一个或者多个事件监听器,这有两种方式:其一是通过在标记语言中通过onXxx属性指定;其二是调用要监听组件或者页面的addEcentListener方法。另外,除了在浏览器端由客户活动触发的事件,应用程序也可以通过org.zkoss.zk.ui.event.Events类中的sendEvent或者postEvent方法来触发事件。这两种方法的区别在这里暂不讨论。
由于桌面是服务于同一URL请求的页面的集合,所以桌面也是事件监听器可以访问的范围。正是由于事件是与桌面绑定在一起的,所以同一桌面产生的事件会被按顺序处理,而不同桌面产生的事件会被并行处理,这样便在并发与复杂度之间得到了很好的权衡。
当一个组件被一个线程而不是任何的事件监听器创建时,它不属于任何桌面。在这种情况下,我们可以把它放在任何一个桌面上,只要把它与适当的事件监听器关联即可。当然一旦组件属于某个桌面,它就永远属于这个桌面了。不过对大多数应用程序来说很少遇到需要使用线程而不是事件监听器来创建组件的情况。
五、ZUML和XML命名空间
在ZUML中用XML命名空间是可选的,仅当需要在同一页面中使用两种或者以上组件时才有必要这样做(例如混合使用XUL和XHTML组件)。例如:
<html xmlns:="http://www.w3.org/1999/xhtml" xmlns:x="http://www.zkoss.org/2005/zul"
xmlns:zk="http://www.zkoss.org/2005/zk">
<head>
<title>ZHTMLDemo</title>
</head>
<body>
<h1>ZHTML Demo</h1>
<table>
<tr>
<td><x:textbox/></td>
<td><x:button label="Now" zk:onClick="addItem()"/></td>
</tr>
</table>
<zk:zscript>
void addItem() {}
</zk:zscript>
</body>
</html>
1. xmlns:x=" http://www.zkoss.org/2005/zul " 指定一个称为ttp://www.zkoss.org/2005/zul的命名空间,并且使用x来呈现这个命名空间。2. xmlns:="http://www.w3.org/1999/xhtml" 指定一个称为http://www.w3.org/1999/xhtml 的命名空间,且使用它作为默认的命名空间。3. <html> 从默认的命名空间中指定一个称为 html 的元素,在这个例子中也就是http://www.w3.org/1999/xhtml 。4. < x:textbox/> 从 http://www.zkoss.org/2005/zul命名空间中指定一个称为textbox 的元素。
The End
- 大小: 4.1 KB
分享到:
相关推荐
从给定的文件信息来看,这是一份详细的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发展及系统安装...
# SpringCloud课堂笔记知识点解析 ## 一、微服务概述 ### 1.1 微服务定义 微服务架构作为一种新兴的设计模式,旨在通过将单个应用程序分解为多个小型、独立的服务来提升软件的可扩展性和灵活性。这些服务通常遵循...