<listbox id="carListbox" emptyMessage="No car found in the result" height="160px" style="margin-top:10px">
<listhead> ---表头
<listheader label="Model" /> ---表头列名
<listheader label="Make" />
<listheader label="Price" width="20%"/>
</listhead>
<template name="model"> ---数据源
<listitem> ---数据项(行)
<listcell label="${each.model}"></listcell>
<listcell label="${each.make}"></listcell>
<listcell>$<label value="${each.price}" /></listcell>
</listitem>
</template>
</listbox>
<hbox style="margin-top:20px" id="detailBox" visible="false">
<image id="previewImage" style="padding:10px" />
<vbox>
<hlayout>
Model : <label id="modelLabel" style="font-weight:bold"/>
</hlayout>
<hlayout>
Make : <label id="makeLabel" style="font-weight:bold"/>
</hlayout>
<hlayout>
Price :
<span>$<label id="priceLabel" style="font-weight:bold"/></span>
</hlayout>
<label id="descriptionLabel" />
</vbox>
</hbox>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
页面与java代码的关联:
方法一:
监听所关心的事件,然后调用合适的方法进行处理。例如:可调用onCreate初始化、onOk处理、onCancel取消事件
<window id="main" onCreate="MyManager.init(main)" onOk="MyManager.process(main)" onCancel="MyManager.cancel(main)"/>
必须有一个名为MyManager的java类,内容如下:
public class MyManager{
public static void init(Window main){ }
public static void save(Window main){ }
public static void cancel(Window main){ }
}
方法二:
不在ZUML页面嵌入java代码,可以继承一个组件的实现来处理事件
public class MyManager extends Window{
public static void init(Window main){ }
public static void save(Window main){ }
public static void cancel(Window main){ }
}
然后使用use属性指定类,如下:
<window use="MyManager"></window>
方法三:
若使用MVC模式,不想再window(视图)内嵌入处理代码,可以实现一个类来初始化window,此类必须实现org.zkoss.zk.ui.util.Composer接口
public class MyManager implements Composer{
public void doAfterCompose(Component comp){
((Windos)comp).setTitle("my Title");
...你要初始化的东西
comp是一个窗口
}
}
然后使用apply属性指定类,如下:
<window apply="MyManager"></window>
window仍然作为org.zkoss.zul.Window的一个实例被创建,且作为comp参数被传递给doAfterCompose方法,然后,你可以处理你所希望的初始化
若想apply多个composer使用逗号隔开,可以使用EL表达式来返回类,它的名称,Composer实例,或Composer实例集合
<window apply="MyManager,MyManager2">"/>
<textbox apply="${c:mycomposer()}"/>
</window>
组件的获取、添加:
组件添加到一个页面的方法:
1、调用setPage--将组件指定为一个页面的根组件
2、调用setParent、insertBefore、appendChild----将组件定义为另外一个的子组件,那么属于同一页面的子组件将会属于父组件所属的页面
页面组建获取:
每个组件都有一个标识,可利用getId方法获得
任何组件可形成一个ID空间,必须实现了org.zkoss.zk.ui.IdSpace接口
相同ID空间内的组件称为fellows,getFellow方法可被同一ID空间内的任何组件调用,同一空间内的任何组件调用getSpaceOwner方法返回的是同样的对象
数据源和页面组件间的数据关联:
数据源 <=====数据绑定管理器=====>组件
(只要告诉数据绑定管理器和数据源的联系,数据绑定管理器会自动完成加载)
第一步:页面声明数据源(或后台java类中声明数据源)
<zscript>
Person p= new Person();
p.setName("king");
</zscript>
第二步:页面顶部初始化数据绑定管理器
<? init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>
第三步:将UI组件关联至数据源
只需要定义UI对象,并关联数据源:使用ZUML注释表达式来告诉数据绑定管理器数据源和UI组件的关系
<component-name attribute-name="@{bean-name.attribute-name}"/>
component-name:组件名
bean-name:数据源
attribute-name:描述UI组件或数据源的一个属性
<textbox value="@{p.name}"/>
控制组件加载数据源的时机:
<component-name attribute-name="@{bean-name.attribute-name , load-when='component-id.event-name'}"/>
component-id:UI组件的ID
bean-name:事件名称
例如:一个人的姓或名字改变后,全名也跟着改变
<textbox id="firstName" value="@{person.firstName}"/>
<textbox id="lastName" value="@{person.lastName}"/>
<textbox id="fullName" value="@{person.fullName , load-when='firstName.onChange , lastName.onChange'}"/>
控制组件保存数据到数据源的时机:
<component-name attribute-name="@{bean-name.attribute-name , save-when='component-id.event-name'}"/>
例如:一个人的姓或名字改变后,
<textbox id="firstName" value="@{person.firstName , save-when='self.onChange'}"/>
<textbox id="lastName" value="@{person.lastName , save-when='self.onChange'}"/>
<textbox id="fullName" value="@{person.fullName}"/>
一个数据源关联多个组件:
集合数据源和组件的关联:
支持集合的UI组件有:Listbox、Grid、Tree
第一步:定义集合数据源
第二步:将集合和UI组件的model属性相关联
第三步:定义一个UI组件模版
1、使用self属性定义一个想要的变量,用来呈现集合内的每个实例
<component-name self="@{each='variable-name'}"/>
2、将UI组件和变量关联
<component-name attribute-name="@{variable-name.attribute-name}"/>
例如:
List persons;
<listbox id="" model="@{persons}">
<listhead>
<listheader label="" />
</listhead>
<listitem self="@{each='person'}">
<listcell> <textbox value="@{person.name}"/> </listcell>
</listitem>
数据源和UI组件的定制转换:
如果数据源是一个bolean值,为true时,我让页面的组件显示为一幅图,为false时显示为另一个(即不让显示true或false)
<component-name attribute-name="@{bean-name.attribute-name , converter='class-name'}"/>
step1、定义实现了TypeConverter的转换类,并实现下面的方法:
1)、coerceToUI,将一个值对象转换成UI组件属性类型
2)、coerceToBean,将一个值对象转换成bean属性类型
step2、在converter标签表达式内指定转换器的类名
定义数据绑定管理的访问权限:
<component-name attribute-name="@{bean-name.attribute-name , access='type-name'}"/>
attribute-name 的模式为both(加载/保存),load(仅加载),save(仅保存),none(都不可)
MVC模式的类形式:
public class SearchController extends SelectorComposer<Component> { }
组建添加监听器方法:
第一种: 通过在标记语言中指定onXxx属性,属性值为任何java代码
<listitem onSelected="showDetail()">
public void
showDetail(){}
<button label=”ok” onClick=” MyManager .save()”/>
public class MyManager extends Window{
public void save(){ }
}
第二种: 为监听的组件或页面调用addEventListener方法
<listitem>
@Listen(
"onSelect = #carListbox"
) //carListbox:<listbox id="carListbox">
public
void
showDetail(){ }
Class MyListener implements org.zkoss.zk.ui.event.EventListener{
Public void onEvent(Event event) throws UiException { }
}
<hbox > </hbox> -----横向排列
<vbox > </vbox> -----纵向排列
相关推荐
zk-6.5.0.zip ZK 6.5.0 Sep 12, 2012 * Features ZK-447: The file upload allows users to drag and drop local files (HTML5) ZK-1241: ZK Client Widget support swipe event for tablet/mobile device ZK-...
TPC-ZK-II微机接口实验系统正是在这种背景下推出的,该设备在TPC-ZK-II微机接口实验系统上配置了USB接口模块,直接与主机(PC)的USB接口连接,形成了一套完整的USB总线接口的微机接口实验系统。
《TPC-ZK-II集成开发环境(64位)》是一款专为微机程序设计而打造的高效开发工具,尤其适合中文用户使用。在这款64位版本的集成开发环境中,用户可以进行高效的编程、调试以及项目管理,极大地提升了开发效率和编程...
【Zkteco中控智慧信息屏设备ZK-S1007用户手册】是一份详细的指导文档,旨在帮助用户充分理解和操作中控智慧的ZK-S1007信息屏设备。这款设备集成了先进的生物识别技术和多媒体展示功能,常用于办公、教育、商业等场所...
【标题】"zk-bin-5.0.0-RC.zip_DEMO_fckez.jar_zk_zk demo_zk-demo-5.0.z" 暗示这是一个关于Zookeeper的演示项目,版本为5.0.0-RC。其中包含了一个名为`fckez.jar`的应用程序,以及与Zookeeper(zk)相关的示例代码...
中控智慧设备说明书
标题“zk-bin-3.6.1”暗示我们正在讨论ZooKeeper的一个特定版本的二进制分发包,这是Apache ZooKeeper的3.6.1版本。ZooKeeper是一个分布式的,开放源码的协调服务,它为分布式应用程序提供一致性服务。这个包通常...
《Go-zk-sniffer:利用Golang解析ZooKeeper数据包》 ZooKeeper,作为分布式协调服务,广泛应用于各种分布式系统中。然而,对于其内部数据包的监控和分析,往往需要专业的工具来帮助我们理解系统运行状态。Go-zk-...
ZK-bin包文件是ZooKeeper的可执行文件集合,包含了运行ZooKeeper服务所需的所有必要组件。在Eclipse环境中部署ZK-bin包,可以方便地进行开发和测试工作。 首先,了解ZooKeeper的核心概念: 1. **节点(Znode)**:...
标题中的"zk-src-6.0.1.zip_zk_zk_java_zk-src-6.5.1.1"指的是ZK框架的源代码压缩包,包含版本6.0.1和6.5.1.1。ZK是一个基于Java开发的用户界面框架,专门用于构建富Web应用。这里提到了两个版本的源代码,意味着...
标题中的"zk-bin-7.0.2.zip"是一个ZK框架的二进制发行版,版本号为7.0.2。ZK是一个基于Java的用户界面开发框架,专门用于构建富客户端Web应用,尤其是那些需要丰富交互性的网页应用。ZK提供了一种简单而直接的方式来...
【标题】"zk-bin-3.6.2.zip_zk_zk version 3_zk-bin-5.0.2" 涉及到的是ZooKeeper的两个不同版本,即3.6.2和5.0.2。ZooKeeper是一个分布式协调服务,广泛应用于大数据和分布式计算系统中,如Hadoop、HBase等。它提供...
在本压缩包"zk-bin-6.5.3.zip"中,包含的是ZK的最新版本6.5.3的二进制发行版。 在ZK的开发过程中,开发者通常会依赖ZK提供的jar包来构建和运行分布式应用。这些jar包包含了ZK的客户端和服务端的所有必需组件,使得...
### SMC ZK2-ZSEA-A 设置方法详解 #### 一、产品概述 SMC ZK2-ZSEA-A是一款带有节能功能的真空发生器,它采用数字式压力开关技术,适用于各种工业自动化应用场景。该型号的产品能够有效提高真空系统的效率,并具备...
zk-smoketest, zk smoketest.py 为ZooKeeper集成提供了一个简单的smoketest客户端 ZooKeeper Smoketest作者:Patrick ( 请关注我的 Twitter )摘要这个项目提供了一个简单的客户端,用于一个ZooKeeper集成。...
标题中的"zk-bin-7.0.3.zip"指的是ZooKeeper的一个特定版本,即7.0.3的二进制发行版。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的必备组件,可以提供诸如命名服务、配置管理、集群同步...
本文档是关于ZK-ZT2多功能直流电机调速器的使用手册。手册详细介绍了该调速器的功能、参数指标、接口说明及控制模式等内容。以下是手册中的关键知识点总结: 1. 产品简介 ZK-ZT2调速器支持四种运行模式:手动(人工...
《深入理解Node.js ZooKeeper浏览器:node-zk-browser-master》 在现代分布式系统中,ZooKeeper是一个不可或缺的组件,它作为一个高可用的分布式协调服务,为数据存储、配置管理、命名服务等提供了强有力的支持。而...
该源代码对应本人博文《zk-SNARKs实战:使用circom和snarkjs实现简单版的Tornado(含源码)》,如要看该文章,可直接在百度中根据题目搜索