- 浏览: 753454 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
1.简介
欢迎使用zk框架,丰富web应用最简单的方式。
组件开发指南描述如何开发zk组件;关于zk的概念和特性可以参考开发指南。关于安装可参考快速开始指南。关于组件属性和方法的全面描述大家可参考ZK开发参考手册。
在这章节中,我们将向你介绍zk组件最基本的概念和组件的开发。
1.1 组件的两面性(Two Sides of a Component)
一个组件是由两部分组成的:展现层和句柄。它们就像同一硬币的两面。展现层是组件的可视化部分,它运行在浏览器端并负责和用户进行交互。句柄是一个java对象,它运行在服务器端并负责和应用程序进行交互。
1.1.1展现层
展现层是一个组件的可视化部分。它是用户看到并与之交互的界面。当一个组件被创建并附属于一个页面时,它的展现层才会在客户端被创建从而提供可视化的外观。
例如,当应用在服务器端创建一个按钮时,按钮模样的展现层就会在客户相应地被创建,因此用户可以点击它。
1.1.2句柄
句柄实质上是一个运行在服务器端的java对象。它拥有应用程序可访问的所有状态和API函数。从应用程序的角度来看,所能知道和访问的就是这个java对象。换句话说,应用程序并不是通过互联网与用户直接交互的。相反,应用程序是与java对象进行交互的,而java对象(大体说,是组件)相应地再更新展现层部分。同样,如果用户访问可视化部分,组件会更新java对象并通过事件的方式通知应用程序。应用程序不需要知道任何关于Ajax,java mobile,gongle android或Flash。客户端和交互的技术已经在组件的实现中被封装。
1.2页面和渲染(Page and Rendering)
当一个组件被创建(例如 new Button()),它并不属于任何页面。也就是说,如果组件不属于某个页面,在客户端该组件是不能被展现的。这也意味着任何对组件的更新操作在客户端都是不起作用的。
另一方面,一旦某个组件附属于一个页面(例如,属于一个页面),任何对该组件的更新操作都会使展现层相应发生变化。
为了提高执行效率,zk不会立即更新客户端的变化。相反,它汇集所有的更新,优化它们,然后将客户端需要更新的一个最小集合做最终处理解析后发送给客户端。最终的解析叫渲染解析。
从应用程序的角度看,存在四种解析。而从组件的角度看,其他的解析都相同,因此对于组件而言,你可以说存在渲染解析和非渲染解析这两种解析。
1.2.1非渲染解析(The Non-Rendering Phases)
与渲染解析相反,在非渲染解析中,除了redraw方法以外,应用程序和zk可以访问组件的其他任何方法。如果一个组件需要重画或展现层需要更新状态,这些工作都是组件通知zk引擎的。例如,你有一个导致客户端重画展现层的方法,那么你可以回调invalidate()方法。
public MyComp extends org.zkoss.zk.ui.AbstractComponent { public void setValue(String value) { _value = value; invalidate(); } }
Invalidate()方法的调用后会通知zk在渲染解析中重画这个组件。它并不立即重画组件。相反,zk引擎会自动汇集所有的更新,稍后在渲染解析中处理它们。
1.2.2渲染解析(The Rendering Phase)
所有的事件处理完成后,zk启动渲染解析重画组件在其他解析中无效的部分。换句话说,如果一个组件的invalidate方法曾被调用,zk就会在渲染解析中调用redraw()方法。
在渲染解析中,只有redraw()方法被调用,invalidate() 方法不被调用----这表明在渲染解析中除了redraw 方法,其他的方法都不能调用。
模式(Molds)
AbstractComponent类的主要实现中介绍了模式的概念。模式是组件表面层样式的一种展现。例如tabbox支持default和accordion两种模式,这两种模式为同一组件提供不同的展示效果。
<tabbox mold="default"> </tabbox> <tabbox mold="accordion"> </tabbox>
为了加速开发效率,在组件开发中推荐继承AbstractComponent或它的衍生类。继承AbstractComponent,你不需要直接实现redraw()方法,而你可以用你喜欢的servlet技术生成展现层,例如DSP和JSP。
1.3 开发组件三部曲(Trilogy of Component Development)
从开发的角度看,实现一个组件有三步:第一,你需要设计展现层;第二,你必须在服务器端实现以java类形式存在的句柄。最后,你需要用xml文件对它们进行配置使它能被应用程序访问。
如何实现展现层取决于客户端的技术,例如,ajax浏览器采用的是html标记语言和js代码,而java手机客户端采用的是Java MIDlet 技术。出于描述的方便,我们在指南中重点放到了ajax浏览器。下面的图说名了它们之间的关系。
1.3.1开发展现层Development of View
对于ajax浏览器,组件的展现层是基于HTML 标签和有选择性的JavaScript方法。HTML tags用于可视化的展现,而JavaScript方法用于初始化、清除、监听浏览器事件和服务器交互。
HTML标记 (HTML Tags)
对于ajax浏览器,可视化展现是由一系列的HTML标记语言实现的。例如,你想用HTML的BUUTON标记去代表一个组件,那么表面的设计可能是这个样的:
<BUTTON id="z_ed_0" z.type="mycomps.MyButton">I am a button</BUTTON>
在这里,z_ed_0是组件的UUID(该属性是zk加载器分配的),z.type是一个特殊属性用来代表组件的类型。可视化展现层被浏览器解析并运行在浏览器端,然而,它们却是在服务器端生成的,生成时redraw()方法被调用。所有的东西都被写在writer argument这个参数中传递给redraw()方法后发送给客户端的。为了实现redraw()方法,你可以通过继承AbstractComponent类或它的衍生类来实现,而不需要你自己直接去实现。你可以用你喜欢的Servlet技术去实现所谓的模板,例如DSP,JSP等等。出于描述方便的考虑,我们在这个指南中主要应用DSP。关于采用Java Servlet技术,你可以用一个叫组件渲染器的类去实现(即org.zkoss.zk.ui.util.ComponentRenderer)。它的可读性可能比较困难,但执行效率很好。我们在文章的下边会讲到它。
JavaScript 方法(JavaScript Methods)
除了继承一个简单的组件外,你通常需要提供一些JavaScript代码,用来与用户进行交互、操作HTML标签和与服务器交互。JavaScript代码根据它们的目的不同可以分组为单个的方法。例如,在客户端,你想在组件的初始化中注册一个事件监听器,那么它对应的JavaScript代码可能是这样的:
zkMyButton.init = function (cmp) { zk.listen(cmp, "click", function (evt) {/*my listener*/}); };
在这里,方法的名字是由组件类型决定的,同时名字也决定了何时被调用。在这个例子中,按钮的z.type是mycomps.MyButton(关于z.type属性具体说明在上面有描述)。它表示调用的JavaScript代码是存储在/web/js/mycomps.js.这个JavaScript文件中的(注意该文件必须存放在可被类加载器加载的位置)。它的组件类型是MyButton。如果我们想让它在初始化的时候执行,那么方法的名字必须是zkMyButton.init
(= "zk" + "Type" + ".when"). 类似的, 如果你想在浏览器重新设置大小的时候调用,那么这个方法的名字将是zkMyButton.onSize. 在后面我们会对它做更多的解释。
1.3.2 句柄的开发(Development of Handle)
句柄是组件中可被web应用程序访问的状态和API,更确切地说,它是实现org.zkoss.zk.ui.Component接口的一个java类。一般你不需要直接实现这个接口,你可根据需求,从已存在的类中继承,这些存在的类象
org.zkoss.zk.ui.AbstractComponent, org.zkoss.zk.ui.HtmlBasedComponent, and
org.zkoss.zul.XulComponent.例如,你想扩展AbstractComponent的主要实现,java类的实现可能是这样的:
public MyButton extends AbstractComponent { }
如果你是扩展一些主要应用的实现,除了组件指定的方法外,基本不存在你要实现的抽象类。
1.3.3配置(Configuration)
一旦你实现了展现层和句柄,你可以在xml文件中说明该组件,以便zk能加载它,应用程序能用它。这个配置文件叫lang-addon.xml.在工程中有两个地方你可以放置该文件,一个是在/metainfo/zk目录下,这种是通过类的路径存储的(一般是jar文件的一部分)。另一种方法是在web应用程序中(作为war文件的一部分)通过在/WEB-INF/zk.xml中指定正确的路径。
假设我们展现层的是/web/myaddon/button.dsp,句柄是com.myaddon.MyButton类,那么让我们看一下配置应该是这样的:
<language-addon> <addon-name>myAddon</addon-name> <language-name>xul/html</language-name> <component> <component-name>mybutton</component-name> <component-class>com.myaddon.MyButton</component-class> <mold> <mold-name>default</mold-name> <mold-uri>~./web/myaddon/button.dsp</mold-uri> </mold> </component> </language-addon>
正如上面展现的一样,每一个lang-addon.xml必须指定一个唯一的名字(addon-name)和它属于的语言(language-name)。每个组件定义必须指定组件的名字(component-name)、句柄 (component-class) 和 展现 (mold).每个组件可以有多个表现层,每个表现层都有一个名字(mold-name)。默认的模板名字是default,该模板必须有(除非你想直接继承redraw方法)。
发表评论
-
采用java.util.concurrent.Semaphore 类实现对资源限制访问量
2010-10-27 14:59 1920package com.citicbank.vipfund.w ... -
zk中message的封装
2009-06-14 16:23 1934最近,用zk的message老感觉填写东西很麻烦,就对它做了此 ... -
zk如何调用本地javascript代码向服务器端发送数据
2009-06-11 20:55 4812今天,折腾了一个上午,加下午1个小时,终于实现了zk页面中,如 ... -
使用zk的bandbox和listbox实现的一个具有搜索功能的combobox(实现后台分页)
2009-06-10 14:37 3913在图片附件中有效果图,可以先看一下. 先说下来由:因 ... -
试着用zk结合hibernaet实现分页查询
2009-06-10 14:14 2607原文:http://www.iteye.com/topic/2 ... -
根据sql查询实现zk Listbox翻页显示数据
2009-06-10 14:07 2371最近一直在研究如何封装zk的Listbox,实现简单的 ... -
zk中定义布局模版实现
2009-06-02 23:03 3042在项目的开发过程中,有些布局是固定的,为了布局的统一,通常会制 ... -
zk中动态产生多个组件的实现
2009-06-02 22:34 3444zk动态产生多个页面的例子代码: /** * * ... -
zk框架中常见问题的解决续
2009-06-02 21:02 30411、局部刷新 /** * 刷新页面* */ ... -
zk框架中常见问题的解决
2009-06-01 22:10 118541、打开浏览器窗口常用于超链接 /** * 重新打开 ... -
zk中zul页面中组件的id和java类中的变量绑定实现
2009-06-01 21:58 7034zul 页面 index.zul <?xml ver ... -
zk组件开发指南(3)
2009-06-01 21:01 50273.展现层 在客户端,展 ... -
zk组件开发指南(2)
2009-06-01 20:52 42562. 句柄Handle 句柄是运行在服务器端可以被应 ... -
zk组件开发指南(目录)
2009-06-01 19:40 2761声明:本人翻译水平有限,有误之处请多指教。 ...
相关推荐
zk组件开发指南 部分翻译 zk组件开发指南 部分翻译
我做的zk组件开发代码,已经在eclipse上运行的
ZK程序员开发指南.docZK程序员开发指南.docZK程序员开发指南.docZK程序员开发指南.docZK程序员开发指南.docZK程序员开发指南.docZK程序员开发指南.doc
zk组件封装demo,开发环境:zk6.0,maven,eclipse juno, jdk1.5
ZK开发手册 ZK开发手册 ZK开发手册 ZK开发手册 ZK开发手册
zk内部多种组件的使用说明,提供了zk种各种组件的使用方法,代码示例。
ZK开发指南 Java、AJAX 、ZK 、 文档
ZK框架开发手册 ZK 7.0.5 Developer's Reference.pdf ZK框架开发手册 ZK 7.0.5 Developer's Reference.pdf
ZK是一套以 AJAX/XUL/Java 为基础的网页应用程序开发框架,用于丰富网页应用程序的使用界面。最大的好处是,在设计AJAX网络应用程序时,轻松简便的操作就像设计桌面程序一样。 ZK包含了一个以AJAX为基础、事件驱动...
ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册ZK中文开发手册
ZK 8.0.0端参考 ZK 8.0.0组件开发的必需品 ZK 8.0.0组件引用 ZK 8.0.0配置参考 ZK 8.0.0开发人员的参考 ZK 8.0.0风格定制指南 ZK 8.0.0 ZUML参考 zk-mvvm-book
ZK Ajax开发框架是一套以 AJAX/XUL/Java 为基础的网页应用程式开发框架,用于丰富网页应用程式的使用接口。最大的好处是,在设计AJAX网络应用程式时,轻松简便的操作就像设计桌面程式一样。 ZK包含了一个以AJAX为...
ZK开发手册(Developer's Guide)的中文翻译版一部分已经公开在zk-devguide 开发手册全部共有14章,超过200页,信息非常齐全: 第1到3章是ZK的简介以及基础构造的说明, 第4,5章介绍组件的周期以及如何处理事件....
ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版 ZK开发手册中文版
1、本指南描述了如何设计友好可用的web界面,并介绍如何基于ZK技术实现界面。遵循本指南可使得基于 ZK技术的web应用界面达到美观、规范、一致,并符合可用、无障碍原则。2、提供一个zk换肤演示Demo,供ZK开发的朋友...
很不错的,zk初学者及资深开发者必不可少的指导资料
ZK开发手册中文版,里面有各种ZK组件的使用方法
ZK 开发手册(带目录版本),详细介绍zk的前台开发和后台数据绑定功能,是zk入门的首选.
ZK 3.6.0快速指南英文PDF版 ZK 一个好用的ajax框架
ZK安装 ZK入门开发讲解共3个pdf.rar