ZK 开发手册
Version 3.5.1
第 1 章 简介
欢迎使用 ZK---- 一种丰富 Web 应用程序的最简单方式。
此开发手册买描述了 ZK 的概念和功能。关于如何安装配置 ZK 的环境,请参阅 Quick Start Guide。
如果想得到的各个组件(components)的属性和方法的详细描述,请参阅 Developer's
Reference。
这章描述了 Web 程序,AJAX 技术和 ZK 项目的历史背景。如果你想马上了解 ZK 的功能,可以
跳过这一章。
传统的 Web 应用程序
以简单高效交换文档为目的的 Web 技术,例如超文本传输协议(HTTP)和超文本标记语言(HTML),
都来源于单页性(page-based )和无状态(stateless-communication)的模式。在这种模式中,
一个页面是自给自足(self-contained)的,并且是沟通客户端与服务器端的最小单位。
随着网络俨然成为应用开发的默认平台,这种模式面临着巨大的挑战:对于表现当今应用程序中复
杂性的无能为力。举个例子,为了给客户报价,你或许必须打开另一个页面来查询此客户的交易记
录,再打开一个页面来显示当前的价格,还得开一个页面来存储当前信息。用户被迫离开他正在工
作的页面,并且在几个页面间来回浏览。这很容易迷失,混淆,结果是把客户弄得不愉快,销售机
会的损失和低生产力。
在这种单页性(page-based )的模式上开发一个现代的应用程序也是一个极大的挑战。在这种模
式中,运行在服务器上的应用程序必须处理来自从语法上分析请求,送出回应 ,连接用户从一个
页面到另一个页面路由的一切,并且处理用户的各种错误。 数十种框架,例如 Struct,Tapestry
和 JSF,随即出现用来简化开发过程。由于单页性(page-based)模式与现代模式之间的巨大差别,
学习和使用这些框架并不是一个愉快的过程,更不要提直觉感知(intuition)和简化了。
点对点(Ad-hoc)AJAX 应用
经过数十年的演变,Web 应用已经从静态 HTML 发展到 DHTML,applets,Flash,最后发展到
了 AJAX
[
1
]
(Asynchronous JavaScript and XML ,非同步的 JavaScript 和 XML )。通过谷歌
地图及推荐(Google Maps and Suggest)的说明,AJAX 技术通过提供与桌面应用程序同等水平
的互动性和反应能力给 Web 应用带来了新生命。不同于 applets 或 Flash,AJAX 基于标准的浏
览器和 JavaScript,并且不需要专门的插件。
AJAX 是新一代的 DHTML,就像 DHTML,它在很大程度上依赖于 JavaScript 监听用户活动产生
的事件,然后动态的操纵浏览器中一个页面(亦称 DOM)的视觉表现。此外,它更近一步,能够使
与服务器的沟通异步进行,即不需要离开或提交整个页面。它通过引入客户与服务器间轻量级的通
信(light-weight communication )打破了基于页面的模式。妥善设计,AJAX 可以给 Web 应用
带来丰富的桌面通用组件,而且在 Web 应用程序的活动周期内可以动态更新这些组件并通过应用
程序获得对组件的更多控制。
当提供给用户需要的交互性的同时,AJAX 给已经很昂贵的 Web 应用程序开发增加了复杂性和技
术先决条件。开发者不得不在浏览器中操纵 DOM,并且使用不兼容甚至是错误的 JavaScript 与
服务器通信,为了更好的交互性,开发者必须重复复制应用数据和业务逻辑以便于浏览。这样就增
加了维护成本且面临在服务端与客户端同步数据的挑战。
底线是在关于处理请求方面,点对点(Ad-hoc)的 AJAX 应用与传统的 Web 应用没有区别。开发
者仍然必须解决由单页性(page-based)和无状态(stateless-communication)模式造成的隔阂。
ZK: 它是什么
ZK 是一个事件驱动(event-driven)的,基于组件(component-based)的,用以丰富网络程序中
用户界面的框架。ZK包括一个基于 AJAX事件驱动的引擎(engine),一套丰富的 XUL和 XHTML,
以及一种被称为 ZUML(ZK User Interface Markup Language,ZK 用户界面标记语言)的标记
语言。
有了 ZK,您可以利用 XUL 和 XHTML 的丰富特性来呈现您的 Web 应用,操纵它们来处理因用户
活动而引发的事件,就像在桌面应用程序中那样。不同于大多数其它框架,就 ZK 而言,AJAX 是
一种幕后(behind-the-scene)技术,组件内容的同步和流水线事件(pipelining of events)都由
ZK 引擎自动完成。
您的用户获得了如同桌面程序的互动性和反应能力,而您的开发仍然像开发桌面应用程序那样简单。
除了简单的模型和丰富的组件,ZK 也支持一种文本标记语言,称为 ZUML。ZUML,如同 HTML,
可以让开发人员设计界面而无需编程。通过 XML 的命名空间,ZUML 无缝的集成了一套不同的标
签
[
2
]
到同一页面。目前,ZUML 支持两套标签,即 XUL 和 HTML。
为了方便快速模型开发(prototyping)和定制,ZK 允许开发人员嵌入 EL 表达式,以及您喜欢的
脚本语言,包括但不限于 Java
[
3
]
, JavaScript
[
4
]
, Ruby
[
5
]
and Groovy
[
6
]
. 开发人员可以选择不
嵌入任何脚本语言,如果他们喜欢更严格的要求(discipline)。不同于 JavaScript 嵌入在 HTML,
ZK 在服务器端执行所有的嵌入脚本。
注意一切运行在服务器端是从应用程序开发者的角度出发的。组件开发人员必须平衡互动性与简单
性来决定什么任务由浏览器来完成,而什么任务由服务器来完成。
ZK: 它不是什么
ZK 并没有关注持久化(persistence)或伺服务器之间的沟通(inter-server communication)。
ZK 被设计的尽可能的简单,它只针对表示层(presentation tier)。他并不要求和暗示任何后端技
术,所有你喜欢的中间件就像以前一样工作,如 JDBC, Hibernate, Java Mail,EJB 或 JMS。
Zk 并没有为开发人员提供(tunnel),RMI 或其他的 API 用来在客户端与服务器端通信,因为所有
的代码都运行在同一服务器的同一 Java 虚拟机(JVM)上。
ZK 并没有强迫开发人员使用 MVC 或其他设计模式。是否使用它们由开发人员选择。
ZK 并不是旨在把 XUL 带入 Web 应用的框架。它的目标是把桌面编程模式引入 Web 应用。目前,
它只支持 XUL 和 XHTML。将来它或许会支持 XAML, Xquery 及其它。
ZK 将 AJAX 嵌入到了现今的应用中(implementation),但它并没有止步于 AJAX 结束的地方。
在 ZK Mobile 中,您的应用程序可以到达支持 J2ME 的任何设备,例如 PDA,手机和游戏平台。
此外,您根本不用修改您的应用程序
[
7
]
。
ZK: 局限
ZK 不适合在客户端运行多任务的应用程序,例如 3D 动作游戏,除非你写编写一个特殊的组件。
ZK 也不适合需要大量使用客户端计算能力的应用程序。
第 2 章 让我们开始吧
这一章的内容描述了如何写出你的第一个 ZUML 页面,如果你没时间的话建议你至少阅读这一章。
此章使用 ZUL 来说明 ZK 的功能,但是也适合于其他 ZK 支持的语言。
Hello World!
当 ZK 安装到你最喜爱的 Web 服务器
[
8
]
后, 你就可以直接编写应用程序。仅需在合适的目录新建
一个名为 hello.zul 的文件
[
9
]
。
<window title="Hello" border="normal">
Hello World!
</window>
然后输入正确的URL,例如:http://localhost/myapp/hello.zul,得到如下页面 :
在 ZUML 页面中,一个 XML 元素描述了应该创建。在这个例子中,被创建的是
window(
org.zkoss.zul.Window),XML 属性(attributes)用来指定 window 组件属
性(properties)的值。在这个例子中,创建了 window,
并指定了 title 和 border 属性的
值分别为 'Hello'和'normal'。XML 元素内的文本(即 Hello World)也可以通过一个称为 Label
(
org.zkoss.zul.Label)的标签来展示。所以上面的例子和下面的例子是等价的:
<window title="Hello" border="normal">
<label value="Hello World!"/>
</window>
也等价于:
<window title="Hello" border="normal">
<label value="Hello World!"</label>
</window>
互动性
让我们来添加一些互动元素: