- 浏览: 460431 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
a464697691:
楼主厉害,现在可以使用了
Proxool houseKeepingSleepTime bug修正 -
chenpi529:
楼主好牛逼
Proxool houseKeepingSleepTime bug修正 -
huangxinyu_it:
多谢楼主了
Proxool houseKeepingSleepTime bug修正 -
kokorodo:
谢谢了!
zk中文开发手册pdf版(基于3.5.1) -
superscorpio:
public void testImportInContex ...
MVEL2.0控制流
运行环境:
1, jdk1.6
2, Tomcat6.0
3, eclipse3.5
4, Dynamic Web project
详细内容见附件,下载
技术点:
1,修改zk中默认字体大小
2,zk中添加网站头像(即favicon.ico)
3,borderlayout布局组件的使用
4,自定义宏的使用
5,tree组件的使用
6,grid的使用,以及偶数行着色显示
7,forward属性的使用
8,基于注解的数据绑定
1)org.zkoss.zkplus.databind.AnnotateDataBinderInit类的使用
2)zk注解中类型转换器的使用(TypeConverter)
3)注解中设置别名
4)调用service,异步更新视图
1,修改zk中默认字体大小
zk中的字体默认为英文字体大小,不适合中文字体
在/WEB-INF/zk.xml文件中加入或替换如下代码,
<!-- Configure the font size for menus in ZUL CSS file (norm*.css)
Default: 11px.--> <library-property> <name>org.zkoss.zul.theme.fontSizeMS</name> <value>12px</value> </library-property> <!-- Configure the font size for smaller fonts, such as toolbar, in ZUL CSS file (norm*.css) Default: 11px. --> <library-property> <name>org.zkoss.zul.theme.fontSizeS</name> <value>12px</value> </library-property>
2,zk中添加网站头像(即favicon.ico)
在首页头部,添加
<?link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"?>
3,borderlayout布局组件的使用(详见),其中要注意的是size属性,不能包含px等像素声明,例如size="200px"
<borderlayout> <north size="20%"> </north> <center> <borderlayout> <west size="18%" id="leftMenu" splittable="true" maxsize="300" collapsible="true" title="菜单"> <!-- 使用宏 --> <leftmenu /> </west> <center> <include src="welcome.zul" id="centerInclude" progressing="true" /> </center> </borderlayout> </center> </borderlayout>
4,自定义宏(详见)的使用
首先定义一个zul页面,然后在使用页加入如下代码
<?component name="leftmenu" macroURI="/WEB-INF/content/menu.zul"?>
其中name为标签名称,macroURI为zul页面的路径
使用是如下
<west size="18%" id="leftMenu" splittable="true" maxsize="300" collapsible="true" title="菜单"> <!-- 使用宏 --> <leftmenu /> </west>
5,tree组件的使用(详见)
<tree id="leftTree"> <attribute name="onSelect"> <![CDATA[ showModel(); ]]> </attribute> <treechildren> <treeitem> <treerow> <treecell label="基于注解"></treecell> </treerow> <treechildren> <treeitem value="userlist.zul"> <treerow> <treecell label="用户列表"></treecell> </treerow> </treeitem> </treechildren> </treeitem> </treechildren> </tree>
6,grid的使用,以及偶数行着色显示(详见)
<!--model为当前window,绑定use对应的类的属性userList --> <!-- 如果不想让偶数行着色,可加oddRowSclass="non-odd"属性 --> <grid fixedLayout="true" id="userlistGrid" model="@{userlistWindow.userList}" height="400px"> <columns> <column label="编号"></column> <column label="名称"></column> <column label="密码"></column> <column label="性别"></column> <column label="年龄"></column> </columns> <rows> <!-- each为foreach的每一个元素,并给each起了一个别名user --> <row self="@{each=user}"> <label value="@{user.id}"></label> <label value="@{user.name}"></label> <label value="@{user.password}"></label> <!-- 性别转换器,bean中的sex为integer类型,使用转换器,转换成男-女 --> <label value="@{user.sex,converter='com.sunflower.zkDemo.web.zk.converter.SexConverter'}"></label> <label value="@{user.age}"></label> </row> </rows> </grid>
7,forward属性的使用,forward属性,如果是方法,此方法必须是public 并以on开始 信息使用见这里
<button label="加载列表" forward="onLoadUserList"></button>
8,基于注解的数据绑定
1)org.zkoss.zkplus.databind.AnnotateDataBinderInit类的使用
zul页面部分<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="userlistWindow"?> 参数arg0对应当前页面的window
2)zk注解中类型转换器的使用(TypeConverter),详见我的另一篇zk3.6.4 api中converter部分
<label value="@{user.sex,converter='com.sunflower.zkDemo.web.zk.converter.SexConverter'}"></label>
SexConverter.java代码
// bean到视图的转换
@Override public Object coerceToUi(Object intSex, Component arg1) { if (intSex instanceof Integer) { int sex = (Integer) intSex; if (sex == 0) return "女"; else return "男"; } return null; }
3)注解中设置别名
<!-- each为foreach的每一个元素,并给each起了一个别名user -->
<row self="@{each=user}">
4)调用service,异步更新视图
// 加载用户列表,与button组件的forward属性绑定
public void onLoadUserList() { // 调用服务,如果与spring整合,可以使用SpringUtil.getBean("UserService"); UserService userService = new UserServiceImpl(); userList = userService.findAllUser(); // 更新grid,显示数据 binder.loadComponent(userlistGrid); //立即显示所有行,不延迟加载 // userlistGrid.renderAll(); }
完整页面:
index.zul
<?page title="zkDemo演示" id="indexPage"?> <?link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"?> <!-- 自定义宏 --> <?component name="leftmenu" macroURI="/WEB-INF/content/menu.zul"?> <borderlayout> <north size="20%"> </north> <center> <borderlayout> <west size="18%" id="leftMenu" splittable="true" maxsize="300" collapsible="true" title="菜单"> <!-- 使用宏 --> <leftmenu /> </west> <center> <include src="welcome.zul" id="centerInclude" progressing="true" /> </center> </borderlayout> </center> </borderlayout>
menu.zul
<?xml version="1.0" encoding="utf-8"?> <zk xmlns:h="http://www.w3.org/1999/xhtml" xmlns:n="http://www.zkoss.org/2005/zk/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"> <zscript> void showModel(){ Treeitem item = leftTree.getSelectedItem(); if(item==null||item.getValue()==null){ return; } Include include = spaceOwner.parent.getFellow("centerInclude"); include.setSrc(item.getValue()); } </zscript> <h:style> .link_underline:visted{ color:#069; font-size:12px; text-decoration:none; } .link_underline{ color:#069; font-size:12px; text-decoration:none; } .link_underline:hover{ cursor:pointer; color:#069; font-size:12px; text-decoration:underline; } </h:style> <tree id="leftTree"> <attribute name="onSelect"> <![CDATA[ showModel(); ]]> </attribute> <treechildren> <treeitem> <treerow> <treecell label="基于注解"></treecell> </treerow> <treechildren> <treeitem value="userlist.zul"> <treerow> <treecell label="用户列表"></treecell> </treerow> </treeitem> </treechildren> </treeitem> </treechildren> </tree> </zk>
userlist.zul
<!-- 此处为关键部分 arg0 为当前window 的id--> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" arg0="userlistWindow"?> <?link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"?> <!-- 定义window id,做为 AnnotateDataBinderInit的参数,以及grid组件model引用 use属性表示当前window关联的class --> <window id="userlistWindow" use="com.sunflower.zkDemo.web.zk.controller.UserListController" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:n="http://www.zkoss.org/2005/zk/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"> <button label="加载列表" forward="onLoadUserList"></button> <!--model为当前window,绑定use对应的类的属性userList --> <!-- 如果不想让偶数行着色,可加oddRowSclass="non-odd"属性 --> <grid fixedLayout="true" id="userlistGrid" model="@{userlistWindow.userList}" height="400px"> <columns> <column label="编号"></column> <column label="名称"></column> <column label="密码"></column> <column label="性别"></column> <column label="年龄"></column> </columns> <rows> <!-- each为foreach的每一个元素,并给each起了一个别名user --> <row self="@{each=user}"> <label value="@{user.id}"></label> <label value="@{user.name}"></label> <label value="@{user.password}"></label> <!-- 性别转换器,bean中的sex为integer类型,使用转换器,转换成男-女 --> <label value="@{user.sex,converter='com.sunflower.zkDemo.web.zk.converter.SexConverter'}"></label> <label value="@{user.age}"></label> </row> </rows> </grid> </window>
welcome.zul
<zk xmlns:h="http://www.w3.org/1999/xhtml" xmlns:n="http://www.zkoss.org/2005/zk/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"> <div align="center"> <image src="/images/splash.gif"/> </div> </zk>
java UserListController
package com.sunflower.zkDemo.web.zk.controller; import java.util.ArrayList; import java.util.List; import org.zkoss.zk.ui.Components; import org.zkoss.zk.ui.ext.AfterCompose; import org.zkoss.zkplus.databind.AnnotateDataBinder; import org.zkoss.zul.Window; import org.zkoss.zul.api.Grid; import com.sunflower.zkDemo.domain.User; import com.sunflower.zkDemo.service.UserService; import com.sunflower.zkDemo.service.UserServiceImpl; @SuppressWarnings("serial") public class UserListController extends Window implements AfterCompose { //绑定器:我起的名字, protected AnnotateDataBinder binder; //前端zul页面grid的id private Grid userlistGrid; //grid model属性绑定的数据,提供get set方法 private List<User> userList = new ArrayList<User>(); public void afterCompose() { Components.wireVariables(this, this); Components.addForwards(this, this); } public void onCreate() { binder = (AnnotateDataBinder) this.getVariable("binder", true); } // 加载用户列表,与button组件的forward属性绑定 public void onLoadUserList() { // 调用服务,如果与spring整合,可以使用SpringUtil.getBean("UserService"); UserService userService = new UserServiceImpl(); userList = userService.findAllUser(); // 更新grid,显示数据 binder.loadComponent(userlistGrid); //立即显示所有行,不延迟加载 // userlistGrid.renderAll(); } public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } }
UserServiceImpl.java
@Override public List<User> findAllUser() { // 仅作为演示,实际操作,访问数据库 List<User> userList = new ArrayList<User>(); User user = null; Random random = new Random(); DecimalFormat decimalFormat = new DecimalFormat("0000000"); for (int i = 0; i < 50; i++) { user = new User(); user.setId(i); user.setName("Sun" + i); user.setPassword(decimalFormat.format(random.nextInt(600000))); user.setSex(random.nextInt(1)); user.setAge(random.nextInt(90)); userList.add(user); } return userList; }
- zkDemo.rar (3.3 MB)
- 下载次数: 300
发表评论
-
zkspring 3.0RC bug 修复
2010-11-19 15:46 1871zkspring 3.0RC bug 修复 ... -
【zk开发】使用Sessions.getCurrent().invalidate()时需要特别注意到问题
2010-11-15 16:25 2442Sessions.getCurrent().invali ... -
【zk开发】use和apply的区别
2010-11-15 14:03 4566use 使用一个组件类,该类必须是当前组件 ... -
【zk开发】java代码给组件添加客户端事件处理javascript
2010-11-10 10:49 1839/** *设置或删除widget的事件监听器,如 ... -
【zk开发】zk中的表单验证(优化版)
2010-11-10 10:41 2407/** * 验证表单 * <p> ... -
【zk开发】ZkUtils 1.2
2010-11-08 10:22 2796ZkUtils 是zk开发中的一些工具方法集合,将散落在 ... -
ZK 5.0.5 chm api文档
2010-11-03 10:11 5877ZK 5.0.5 chm api文档 文档在附件 ... -
ZK 5.0.5正式版发布
2010-11-02 18:24 1189ZK 5.0.5正式版发布 更新日志http: ... -
【zk开发】理解zk事件处理线程
2010-11-01 17:27 2293什么是事件处理线程(EventProcessingTh ... -
【zk开发】zkstudio安装及使用视屏
2010-10-29 16:58 2214安装视屏 http://docs.zkoss ... -
zk5.0.5可能最近两天发布
2010-10-29 13:13 1096zk5.0.5可能最近两天发布 zk5.0 ... -
【zk开发】zk注解的秘密
2010-10-28 14:26 4004The DataBinder that rea ... -
【zk开发】zk内存监控
2010-10-21 09:03 2816所用到的资源 ... -
【zk开发】如何在页面中获得composer对象
2010-10-15 15:31 2645样例: <window id=&qu ... -
【zk开发】jQuery+zk完美客户端
2010-09-14 11:11 2586(function(window) { var lin ... -
【zk开发】zk5.0.4 datebox inplace模式的bug
2010-09-08 16:24 1627zk5.0.4 datebox inplace模式 ... -
使用ZK CE版开发商业软件
2010-09-07 15:50 2482仔细读一下内容 LGPL(GNU Lesser Gene ... -
【zk开发】zk的国际化
2010-09-02 16:22 3824【zk开发】zk的国际化 一,准备资源文件 ... -
zk5.0.4 chm版API
2010-09-01 12:37 1274zk5.0.4 chm版API -
挥起马鞭,升到zk5.0.4
2010-08-31 23:22 1443由于zk5.0.4测试版已发布公开测试,正式版应该很快出 ...
相关推荐
通过"gettingStarted-master"中的示例,我们可以看到ZK如何使用ZUL文件构建用户界面,以及如何通过Java代码处理用户交互。这只是ZK功能的冰山一角,ZK还支持数据绑定、MVC模式、国际化、AJAX更新等多种特性,为...
Spring可以通过ZK的@Wire注解自动将Bean注入到ZK组件中。 4. **配置ZK-Spring**:需要引入ZK-Spring的库,这是一个连接ZK和Spring的桥梁,它提供了Spring的ApplicationContext到ZK Session的绑定,使得ZK组件可以...
在IT行业中,`ZK`(ZooKeeper)、`Spring`和`Hibernate`都是非常重要的技术组件,分别在分布式协调、应用框架和对象关系映射领域有着广泛应用。本项目是将这三个技术进行整合,用于构建一个基于MySQL数据库的完整...
本示例"**dubbo-demo(ZK集群).zip**"提供了如何在实际项目中搭建和使用Dubbo与Zookeeper集群的实例。下面我们将深入探讨这两个组件的核心功能、它们的集成方式以及实际操作步骤。 **Dubbo** 是阿里巴巴开源的一款...
综上所述,"springboot整合dubbo和zookeeper的demo"项目是一个典型的微服务实践,展示了如何在SpringBoot环境中利用Dubbo实现服务间的通信,以及如何借助Zookeeper进行服务注册与发现。开发者可以通过这个项目深入...
6. 创建服务消费者:在消费者项目中引入服务接口,并使用@Reference注解注入服务。 7. 配置服务消费者:同样在配置文件中设置服务消费者的属性,包括应用名、注册中心等。 8. 调用服务:运行服务消费者的Spring Boot...
描述中提到的“demo——springboot整合dubbo+zk”进一步确认了这个项目是一个演示如何在SpringBoot应用中整合Dubbo服务治理框架与Zookeeper作为注册中心的实例。接下来,我将详细讲解这三个技术以及它们之间的整合。...
本项目提供了一个完整的Demo,帮助开发者快速理解并实践Duboo框架的使用。 首先,我们来看一下启动前的准备工作。在运行Duboo分布式框架的Demo之前,必须确保Zookeeper已经启动。Zookeeper是Apache的一个开源项目,...
Spring Kafka 的设计目标是简化与 Kafka 的交互,使得开发者可以轻松地在 Spring 应用程序中使用 Kafka 功能。 **1. Spring Kafka 的核心概念** - **Producers**: 生产者是向 Kafka 集群发送消息的组件。Spring ...
5. **启用Dubbo注解扫描**:在Spring Boot的主配置类中,添加`@EnableDubbo`注解,使Spring Boot能识别并处理Dubbo相关配置。 ```java import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo; ...