- 浏览: 226902 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
newLinuxJava:
http://www.voip-info.org/wiki/v ...
asterisk App Dial 拨号 发起外呼 -
newLinuxJava:
http://www.voip-info.org/wiki/v ...
asterisk App Dial 拨号 发起外呼 -
tsinglongwu:
这种做法在Server端getValue()方法是能获得修改后 ...
client-side programming客户端修改值,但服务端获取仍然旧值的解决办法 -
Listen_ing:
zk+spring+hibernate如何配置hibernat ...
zk+hibernate+spring零配置 -
peterxq181:
严重: Method not found in org.apa ...
zk+hibernate+spring零配置
简介:
关于数据绑定:数据绑定是一种机制,在UI组件和数据源之间自动完成数据复制。应用开发人员只需告诉绑定管理器UI组件和数据的联系。然后数据绑定期会自动完成加载(将数据加载到UI)并保存(UI保存到数据源)
关于zk的注解:zk中的注解不同于java中的注解,zk注解有两种形式,
1,基于标签的 如<a:bind value="person.address.city"/>,仅用于页面
2,类似el表达式,只是el表达式里用$而zk注解使用与java中的注解符号@相同
如 <label value="@{indexWin$composer.totalScore}"> 仅用于页面。
zk注解功能比较单一不能执行类似el中的${1+1}功能,仅可以用于对象图浏览解析显示,
当然zk注解提供converter属性可以对显示或保存的数据类型进行转换,这个是el表达是没有的
zk注解与数据绑定紧密联系一起的,但数据绑定不一定使用注解的方式!
开发环境:
1,zk5.0.7.1
2,jdk1.6
3,eclipse3.6
下面我们从一个例子讨论一下基于注解的一般开发流程:
一,数据绑定的一般流程
二,创建UI页面
UI页面的创建并不一定要放在第一步,因开发团队或个人考虑的是数据还是原型设计而异。
1,让eclipse识别zul结尾的文件:
与jsp、aspx类似,zk也创建自己的标签,这个标签集,
zk给它起了一个名字叫ZUML(zk用户界面标记语言),
zuml语言基于xml,符合xml语法规范。
我们根据zuml的规范书写的文件,通常以*.zul扩展结尾,
但eclipse不识别该文件。识别该文件有什么好处呢?语法着亮、自动提示、标签自动完成、验证文档的正确性
下面介绍如何让eclipse识别zul扩展文件:
eclipse菜单->window -> Preferences ->General ->Content Types -> Text -> xml ->
下部扩展列表右侧 点击Add -> 输入*.zul保存
2,创建zul文件
<?xml version="1.0"?> <window id="indexWin" apply="com.sun4love.zk4love.web.controller.IndexController" xmlns:w="client" xmlns:n="native" xmlns="http://www.zkoss.org/2005/zul" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"> <grid model="@{indexWin$composer.users}"><!-- 注意$前半部分与apply类当前元素的id相同 --> <rows> <row self="@{each=user}" value="@{user}"><!-- self=@{each=user}表示将each变量名修改为user --> <label value="@{user.name}"></label> <combobox readonly="true" selectedItem="@{user.score}" forward="onChange=onReCalculate"> <!-- 将onChange事件转发给onReCalculate --> <comboitem label="0分" value="${0}"></comboitem> <!-- 因为value的值zul页面直接写0的话,zk把他作为String类型,此处用一个小技巧,设置value为数字类型 --> <comboitem label="1分" value="${1}"></comboitem> <comboitem label="2分" value="${2}"></comboitem> <comboitem label="3分" value="${3}"></comboitem> </combobox> </row> </rows> <foot> <footer> </footer> <footer> 总得分: <label value="@{indexWin$composer.totalScore}"></label><!-- 与IndexController类的getTotalScore对应 --> </footer> </foot> </grid> </window>
注意要点:
1)声明window组件,设置id为indexWin并apply(use与apply的区别)IndexController类,
另外还声明定义了client与native命名空间。有几点非常重要,window的id、use与apply的区别、
以及apply常用的几个composer
2)grid的绑定数据模型,model="@{indexWin$composer.users}">,
这里的model器类似swing中的model,是一个数据容器,model的值会根据@{}
注解解释后的结果自动封装为如下不同的model,
BindingGroupsListModel、
BindingListModelArray、
BindingListModelList、
BindingListModelMap、
BindingListModelSet
GroupsListModel
然后分析注解@{}内的表达式,该表达式与el表达式里的对象图浏览完全一样, 没任何区别!
解析过程:在作用域内查找indexWin$composer对象,①然后在indexWin$composer
查找getUsers方法,
特殊情况:如果indexWin$composer.user.address.name中的name为null
或根本没有getName方法或address为空时会发生什么呢?解释过程会重复步骤①
a)无getName方法时,显示效果如下
看到类似Address@ec9441的东西,应该知道这是直接显示对象地址了!
结合Address@ec9441出现的位置,我们应该会很快找出错误!
b)name为null或address为null时:都会得到正确的结果,这里不再解释
3)indexWin$composer名字很奇怪,从哪里来?
在2,1)中我们知道window的id为indexWin,indexWin$composer中$前半部分为组件的id,
window是component,如果window替换成<div id="someCompId">,
此时indexWin$composer就变成了someCompId$composer, 那么$composer是什么?
$composer是一个固定格式, 由apply的IndexController设置的,关于IndexController的详细内容
将在下文介绍。indexWin$composer表示IndexController的实例对象,由zk自动创建。
获得更多bean的控制 apply bean与spring的整合 ,在此抛砖引玉
4)注解中重命名each变量
<!-- self=@{each=user}表示将each变量名修改为user -->
<row self="@{each=user}" value="@{user}">
5) UI到Object bean的自动保存
传统web开发中,例如注册用户,需要很多繁琐的步骤:提交表单,服务器端request.getParameter()
获取表单属性,并创建bean对象, 将表单值封装为bean对象,但request.getParameter()
获取值的仅为字符串,并且bean通常又是一个由多类型组成的状态对象,因此我们还要写一堆的
类型转换代码。在zk中,UI到bean对象和bean对象到UI的数据类型转换即封转都是自动完成的,
当然zk数据绑定器并不是万能的,zk提供了一个接口,由开发人员实现,但大部分我们无需
自定义转换器!
看看下面这张图,"懒程序员"们开始头疼了,但zk已经很简单的转换成你需要的对象!
下面我们通过一个测试,看看zk的数据绑定器做了什么
测试:改变下拉别表,看是否调用score的setter方法,如果调用,zk注解自动保存了选择的值到
user的score属性上
<combobox readonly="true" selectedItem="@{user.score}" forward="onChange=onReCalculate"> <!-- 将onChange事件转发给onReCalculate --> <comboitem label="0分" value="${0}"></comboitem> <!-- 因为value的值zul页面直接写0的话,zk把他作为String类型,此处用一个小技巧,设置value为数字类型 --> <comboitem label="1分" value="${1}"></comboitem> <comboitem label="2分" value="${2}"></comboitem> <comboitem label="3分" value="${3}"></comboitem> </combobox>
public void setScore(Long score) { System.out.println("得分:"+score); this.score = score; }
测试过程如图:
6) 事件转发
下面这段的意思是将combobox的onChange事件转发给某个组件的onReCalculate事件
onReCalculate是谁的事件呢?zk开发中关于forward属性的那点事 这篇文章详细讲解了forward
的用法。
<combobox forward="onChange=onReCalculate">
发表评论
-
JavaScript 秘-密-花-园
2011-11-25 12:44 1028简介 JavaScript 秘-密-花-园是一个不 ... -
web设计showcase网站
2011-10-04 22:06 1131http://www.smileycat.com ... -
【play框架学习】安装
2011-09-30 13:31 13681,预备知识 安装Play框架之前,需要安装jdk5或 ... -
zk主题生成器
2011-09-27 20:37 1722生成器在附件内,兼容zk3.x 与zk5.x,zkth ... -
浏览器如何工作的
2011-09-22 10:46 981英文原文 : http://taligarsiel.com/P ... -
【play学习】Playframework是什么
2011-09-10 20:05 2399本文由Chaos翻译自Play官 ... -
zk服务器端获取鼠标点击位置
2011-09-08 22:24 2689index.zul <?xml version=&qu ... -
非常漂亮的免费图标
2011-09-02 11:31 938网站:http://findicons.com/search/ ... -
zk Fiddle-zk在线测试保存代码分享平台
2011-09-02 10:40 2018http://zkfiddle.org/ 是zk项目组之一To ... -
zksample2-一个复杂应用的zk示例
2011-09-02 10:32 2087Zksample2 is a demo application ... -
zk5.0.8发布
2011-08-31 18:02 1176该版本是一个维护版本,主要于bug修复及引入几个新特性 ... -
spring samples项目
2011-08-29 14:55 4346spring-samples是官方提供的sprin ... -
zk EE/PE/CE的区别
2011-08-18 10:32 4449自从zk5.0以后,zk拆分为 EE / PE / CE ... -
ZK 5.0.8 新特性
2011-08-17 19:03 36498月16日,zk官网:zk5.0.8将要发布 z ... -
js中理解变量的声明
2011-08-17 18:02 949要点: 1,函数内声明的变量,无论在哪里声明,作 ... -
zk client与server code结合提高长操作的响应性
2011-08-17 15:58 1264一,关于长操作与响应性 zk client ... -
如何准确找到重要信息,解决异常:
2011-06-16 11:07 830如何准确找到重要信息,解决异常: 1,异 ... -
css背景合成工具smartsprites
2011-06-15 09:52 1873http://csssprites.org/download. ... -
zk tooltiptext中换行
2011-06-10 23:10 2218<window title="My ... -
zk下载文件中文乱码解决方案
2011-06-02 11:44 3781本文来自http://sun4love.iteye.co ...
相关推荐
ZK数据绑定
zk 数据绑定(grid进行嵌套显示数据), zk 数据绑定(grid进行嵌套显示数据)
zk curd 小例 数据绑定 页面间事件传送 适合初学者
ZK 开发手册(带目录版本),详细介绍zk的前台开发和后台数据绑定功能,是zk入门的首选.
ZK是一个Ajax Java Web框架,利用少量代码就能够开发出拥有Rich UI的Web应用。ZK提供基于XUL的标记语言和事件驱动的组件,可以让你像开发...支持Annotation及数据绑定。集成Google Maps、FCKeditor、DOJO以及Timeline。
ZK页面可以在加载时为Tree绑定数据。 方法:分为两步。(方法在doAfterCompose()里面调用)
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...
GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...