在上一个文章里,我们把项目建好了,并且已经成功运行,现在来理解下zk事件驱动(event-driven)的,基于组件(component-based)的特点
先来点理论,什么叫做基于组件,维基百科里面这么描述的:基于组件的软件工程(Component-based software engineering,简称CBSE)或基于组件的开发(Component-Based Development,简称CBD)是一种软件开发范型。它是现今软件复用理论实用化的研究热点,在组件对象模型的支持下,通过复用已有的构件,软件开发者可以“即插即用”地快速构造应用软件。这样不仅可以节省时间和经费,提高工作效率,而且可以产生更加规范、更加可靠的应用软件。
所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作.
还是用之前的例子来具体说明下
<?page title="Auto Generated index.zul"?> <window title="Hello World!!" border="normal" width="200px"> <label value="You are using: ${desktop.webApp.version}"/> </window>
<label value="You are using: ${desktop.webApp.version}"/>
注意:zk集成了EL表达式,但是这个EL表达式的功能并不全,比如把数据库的clob字段取出来放到ZK集成的这个EL表达式里面,他就不能分辨<br />这类HTML代码,而我们用jsp提供的EL表达式就可以完美的实现换行的效果,希望ZK能在以后的版本里面修正这个BUG
这个label实现的效果是:
You are using: 3.6.2
可以看到,我们得到了当前zk的版本信息,那他是怎么调用的呢,分析这句代码:${desktop.webApp.version}
desktop的意思是桌面信息,因为ZK是基于组件的,在之前的文章里,我们知道,页面(org.zkoss.zk.ui.Page
)是一系列组件的集合,而桌面又是页面的集合,所以我们在任何调用组件的地方都可以直接通过组件得到当前桌面的信息,然后我们通过桌面就能得到application的版本信息了
这句代码,我们这样写更便于理解
${self.desktop.webApp.version}
self的含义是得到当前组件信息,也就是当前这个label,然后通过label进一步得到桌面信息
当然,我们也可以尝试在ZS文件里面写,我们先建一个index.zs文件和index.zul同一个目录下
index.zul需要导入index.zs文件:
<zscript src="index.zs" ></zscript>
当然,为了能够调用相应的组件,我们需要把ID给组件加上
<window id="win" title="Hello World!!" border="normal" width="200px"> <label id="label1" value="You are using: ${self.desktop.webApp.version}"/>
好了,现在index.zul文件完整代码是这样:
<?page title="Auto Generated index.zul"?> <window id="win" title="Hello World!!" border="normal" width="200px"> <label id="label1" value="You are using: ${self.desktop.webApp.version}"/> <zscript src="index.zs"></zscript> </window>
我们在index.zs文件里面这样写
String name = spaceOwner.getDesktop().getWebApp().getVersion(); win.getFellow("label1").setValue(name);
getFellow() : 得到当前组件下的子组件
spaceOwner : zk的隐含对象,得到组件的空间所有者,与self.spaceOwners
相同
我们这样写,一样也可以得到当前版本的信息,和之前的结果是一样的
在这一节,介绍了简单组件的调用方式,下一节,将介绍下ZK的树形结构
版权声明:本文为博主原创文章,未经博主允许不得转载。