`
wuyoubf
  • 浏览: 39738 次
  • 性别: Icon_minigender_1
  • 来自: 呼和浩特
社区版块
存档分类
最新评论

构建一个基于数据库应用:ZK新手的指南

阅读更多

试着运行例子
1.下载todo.zip 文件 并且解压里面的war包文件和一个文件夹。
2.部署war包到Tomcat下$TOMCAT_HOME/webapps/ 目录下 Tomcat会自动解压war包。
3.复制hsqldb文件夹 (数据库文件)到磁盘的根目录下面(例如 c:\)。
4.启动tomacat。
5.打开你的浏览器,访问http://localhost:8080/todo/todo.zul(端口号是在tomcat配置文件里面配置的)你将看到下面的这个截图:

功能描述:

1. 上图所示按钮所对应的事件,当按下“Add“按钮的时候,增加一条记录到数据库。

2. 选择表格中任意一行将显示该行记录的所有字段信息,可以点击“Update”按钮去更新字段信息。

3. 选择表格中任意一行,点击“Delete”按钮去删除选择的记录。

用户界面:

你的第一个ZK组件

第一步是创建一个扩展名为.ZUL文件,我们把它命名为todo.zul,然后把todo.zul 放到web的根目录下面,例如:$TOMCAT_HOME/webapps/ProjectName/ 。
你可以向定义HTMl 组件一样在定义ZK组件在todo.zul文件中 向下图所示,定义一个窗口组件:

这个时候 打开你的Tomcat ,用浏览器浏览地址为:http://localhost:8080/todo/todo.zul ,这个时候将会出现一个窗体,窗体名称为To do List。

ZK中所有的东西都是组件,你可以改变组件的属性值。例如你可以改变title,width,border 等属性值在窗体组件中。这个是非常简单明了,现在你就可以试试改变这些属性,看一下效果。

ZK组件的等级关系

接下来,我们就要使用更多的ZK组件来丰富我们的页面。现在我们需要一个显示数据的表格,我们可以定义一个listbox(列表)组件,这个组件可以显示和修改我们的数据。 Listbox组件需要有结束标示,如下图所示

在这个例子当中,listbox(列表)组件成为了window(窗体)组件的一个子组件。
确实,这种情况在ZK组件中我们称之为等级(包含)关系。在实际的开发页面的时候,如果你错误的定义,组件将会出现页面异常。
比如说,你把window(窗体)组件作为listbox的一个子组件,就会出现页面异常。

嵌套组件:

定义一个listbox,我们用Id(id=“box”)描述控件的唯一性。所以我们可以用“box”来引用定义的listbox组件。 Listbox是个嵌套组件,他可以包括两种子组件:listhead(列表头),listitem(列表项),如下图所定义:

我们还没有完成。我们在第一三个表头组件来表示三列:“Item”,“Priority”,“Date”,
注意组件的结束符。

好了,看看界面效果吧:

现在,我们在表格中定义了三列,表格中的每一行需要三个字段来填充。定义三个listcell(单元格)组件包含在listitem(列表项)中,如下图所示:

列表组件的嵌套结构如下图所示:

输入组件:

为了显示列表三个字段,我们需要输入信息,包括Item字段 ( 文本内容 ),prority字段(数值型) date 字段 (日期型)。
要完成以上的工作,我们需要定一个 textbox(文本框),一个inputbox(输入框)和一个databox(日期选择框)三个组件,如下图所示:

看一下现在的页面效果:

布局组件:

我了区分三个输入框在列表框显示位置,我们可以定义个groupbox(分组框)组件给输入组件分组,同时groupbox的边框会环绕在输入组件四周:

为了分组组件,我们可以定义个标题。这个标题标签处于groupbox组件的顶端,这个标题很向HTML的 legend标签,页面效果如下所示:

持久层

在下面的章节中,我们首先介绍下数据库概要(database schema)和领域对象(domain Object)及Dao对象。

数据库概要:

我们把数据持久化到数据库的表中,需要相应的在数据库建立四个字段:id,name,prority,date 数据库字段,设计如下图所示:

 

Field Type
id varchar(50)
name varchar(50)
priority int
date date

领域对象:
根据上面的数据库表字段,我们可以封装成需要的领域对象。

Dao 对象:

为了与数据库简单的交互,我们需要Dao 对象。Dao对象里面封装了几个方法:findAll(),delete(),insert(),update()。

台界面与后台数据库进行交互

根据我们的需求,我们想实现增加,修改,编辑,删除事件。在下面的介绍当中,我们会学习到如何实现前台与后台数据库之间的交互。
java代码配合ZK组件使用

ZK众多特性中,有一项是在zul页面当中可以支持java代码。 ZK有三点规定要求:直接可以在页面中嵌入java代码;可以把java代码放在独立的文件中;或者页面文件直接引用编译后的class文件;当然,本指南是按照第一种规定以方便解释。
Zul页面嵌入java代码:

首先,我们需要从数据库中加载数据。我们可以定义标签,在标签里面嵌入我们java代码。 <zscript>元素专门定义脚本的标签。我们可以在ZUL页面定义。这里可以定义全局的变量和方法,也可以实例与数据库连接的DAO对象,我们将把查询的结果放到List中。
在<zscript>中定义的全局变量可以通过el表达式访问。你可以使用el表达式在ZUML页面的任意地方。El表达式的语法标示:${expr}
初始连接数据库:

使用forEach循环:

下一部就是读取数据库存储的字段显示到listbox,使用forEach循环。ForEach循环属性是为了用户批量控制组件。
如果你显示字段的集合,ZK Loader(zk 加载器)将创建一些相同的组件去显示这些字段,每个变量代表一个存储在集合中的对象的实例,我们可以使用el表达式去调用对象的getter方法找回他们的属性,如下图所示:

保存用户输入的数据到数据库中

首先,我们要定义一个“add()”方法在<zscript>中。

增加了“add()“方法后,我们将要完成以下三个任务:
1. 检索用户输入数据
2. 保存数据到数据库
3. Ajax局部刷新页面
检索用户输入数据

ZK允许你在java代码里面访问UI组件。你可以通过ID标识符访问一个组件。
在这个例子中,用户输入的数据需要三个输入控件接收,textbox(id ="name"), intbox(id ="priority"), 和datebox(id="date")。
我们可以通过访问控件的Value属性获取用户输入的值,如下图所示:

保存数据到数据库

一旦我们获取到数据,我们就可以把数据持久化到数据库中:

Ajax刷新页面

难以置信,ZK允许我们通过java代码实现Ajax技术刷新页面。既然这样,我们使用java代码插入一项到listbox中,ZK将自动刷新页面:

appendChiild()方法是插入子项的方法。
完整的代码如下所示:

ZK组件中的注册事件监听

来自页面90%以上的反馈触发了用户的动作。“add()”方法没有异常,这个方法仅当我们单击“add”按钮才会被调用。
确定按钮是否被单击,我们要定义个一个 OnClick的事件来监听按钮组件。用户如果单击“add”按钮的时候,将调用add()方法。
是不是很简单明了? 再次,我们看到了ZK提供了非常简单的解决方式:

其他的控制代码:
其余的控制代码在下面列出:
o delete(),从数据库删除一条记录,更新listbox显示
o update(),更新数据库的一条记录,更新listbox显示
o move() , 从listbox中移除数据
o cleargp(),置空groupbox里面的输入组件的内容

注册统一的监听事件:

最后一步我们将注册统一的组件监听事件去调用我们写的方法
o 在“delete”按钮上注册 onClick监听事件
o 在“edit”按钮上注册onClick监听事件
o 在 listbox组件上注册onSelect监听事件

总结:

这个指南包含了编写一个简单web应用的ZK基本技术。


分享到:
评论

相关推荐

    zk quick start

    此快速入门指南旨在帮助初学者了解ZK的基本概念、安装配置步骤以及如何创建第一个ZK应用。 #### 二、准备工作 ##### 2.1 新手指引 对于初次接触ZK的新手来说,本节将提供一些基本的概念介绍和技术背景知识,以...

    ZKMobile for Android 快速上手指南

    - **MyFirstHelloWorld**:这是一个简单的“Hello World”示例,展示了如何使用ZK Mobile for Android创建一个基本的应用程序。 通过以上内容的学习,您应该能够掌握使用ZK Mobile for Android进行Android应用程序...

    ZK Developer Guide

    - ZK 提供了一个简单的 Hello World 示例来帮助新手快速入门。 - 通过这个例子,开发者可以了解到如何创建基本的用户界面组件,并使用 zscript 控制它们的行为。 - **交互性:** - ZK 支持高度的交互性,开发者...

    安卓开发资料,资源

    首先,我们来看看"read me.doc",这是一个常见的文档,通常用于提供关于文件包的说明或指南。在安卓开发中,它可能包含了如何使用提供的教程、代码示例或其他资源的详细步骤,或者解释了文件结构和目的。虽然没有...

    毕业设计物联网实战项目基于Eclipse Theia开源框架开发的物联网在线编程IDE.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    Android毕设实战项目基于Android的医院挂号系统.zip

    【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    (源码)基于Python的KMeans和EM算法结合图像分割项目.zip

    # 基于Python的KMeans和EM算法结合图像分割项目 ## 项目简介 本项目结合KMeans聚类和EM(期望最大化)算法,实现对马赛克图像的精准分割。通过Gabor滤波器提取图像的多维特征,并利用KMeans进行初步聚类,随后使用EM算法优化聚类结果,最终生成高质量的分割图像。 ## 项目的主要特性和功能 1. 图像导入和预处理: 支持导入马赛克图像,并进行灰度化、滤波等预处理操作。 2. 特征提取: 使用Gabor滤波器提取图像的多维特征向量。 3. 聚类分析: 使用KMeans算法对图像进行初步聚类。 利用KMeans的聚类中心初始化EM算法,进一步优化聚类结果。 4. 图像生成和比较: 生成分割后的图像,并与原始图像进行比较,评估分割效果。 5. 数值比较: 通过计算特征向量之间的余弦相似度,量化分割效果的提升。 ## 安装使用步骤 ### 假设用户已经下载了项目的源码文件 1. 环境准备:

    HCIP第一次作业:静态路由综合实验

    HCIP第一次作业:静态路由综合实验

    毕设单片机实战项目基于stm32、esp8266和Android的智能家居系统-设备端.zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    统计学基于Python的Johnson-SU分布参数计算与优化:数据拟合及弹性网络参数优化方法实现(复现论文或解答问题,含详细可运行代码及解释)

    内容概要:本文详细介绍了Johnson-SU分布的参数计算与优化过程,涵盖位置参数γ、形状参数δ、尺度参数ξ和伸缩参数λ的计算方法,并实现了相应的Python代码。文中首先导入必要的库并设置随机种子以确保结果的可复现性。接着,分别定义了四个参数的计算函数,其中位置参数γ通过加权平均值计算,形状参数δ基于局部均值和标准差的比值,尺度参数ξ结合峰度和绝对偏差,伸缩参数λ依据偏态系数。此外,还实现了Johnson-SU分布的概率密度函数(PDF),并使用负对数似然函数作为目标函数,采用L-BFGS-B算法进行参数优化。最后,通过弹性网络的贝叶斯优化展示了另一种参数优化方法。; 适合人群:具有Python编程基础,对统计学和机器学习有一定了解的研究人员或工程师。; 使用场景及目标:①需要对复杂数据分布进行建模和拟合的场景;②希望通过优化算法提升模型性能的研究项目;③学习如何实现和应用先进的统计分布及优化技术。; 阅读建议:由于涉及较多数学公式和编程实现,建议读者在阅读时结合相关数学知识,同时动手实践代码,以便更好地理解和掌握Johnson-SU分布及其优化方法。

    TSP问题的3种智能优化方法求解(研究生课程《智能优化算法》结课大作业).zip

    TSP问题的3种智能优化方法求解(研究生课程《智能优化算法》结课大作业).zip

    毕业设计物联网实战项目基于Rtthread和MQTT搭建的物联网网关.zip

    【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    基于STM32F103C8T6的温湿度传感器(HAL库版),通过串口向电脑端反馈数据(附通过ESP8266-01s模块连接WIFI上传云平台的资料代码-固件库版本).zip

    【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

    自动发布Java项目(Tomcat)Shell脚本

    自动发布Java项目(Tomcat)Shell脚本

    (源码)基于webpack和Vue的前端项目构建方案.zip

    # 基于webpack和Vue的前端项目构建方案 ## 项目简介 本项目是基于webpack和Vue构建的前端项目方案,借助webpack强大的打包能力以及Vue的开发特性,可用于快速搭建现代化的前端应用。项目不仅完成了基本的webpack与Vue的集成配置,还在构建速度优化和代码规范性方面做了诸多配置。 ## 项目的主要特性和功能 1. 打包功能运用webpack进行模块打包,支持将scss转换为css,借助babel实现语法转换。 2. Vue开发支持集成Vue框架,能使用Vue单文件组件的开发模式。 3. 构建优化采用threadloader实现多进程打包,cacheloader缓存资源,极大提高构建速度开启热更新功能,开发更高效。 4. 错误处理与优化提供不同环境下的错误映射配置,便于定位错误利用webpackbundleanalyzer分析打包体积。

    Hands-On Large Language Models - Jay Alammar 袋鼠书 《动手学大语言模型》

    Hands-On Large Language Models - Jay Alammar 袋鼠书 《动手学大语言模型》PDF

    《基于YOLOv8的舞蹈动作分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    (源码)基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统.zip

    # 基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统 ## 项目简介 本项目是一个基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统。系统通过Arduino Feather M0采集传感器数据,并通过WiFi将数据传输到Raspberry Pi。Raspberry Pi运行BalenaOS,集成了MySQL、PHP、NGINX、Apache和Grafana等工具,用于数据的存储、处理和可视化。项目适用于环境监测、物联网设备监控等场景。 ## 项目的主要特性和功能 1. 传感器数据采集使用Arduino Feather M0和AM2315传感器采集温度和湿度数据。 2. WiFi数据传输Arduino Feather M0通过WiFi将采集到的数据传输到Raspberry Pi。

    《基于YOLOv8的音响设备识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    Android毕设实战项目这是一个android 图书管理系统.zip

    【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。

Global site tag (gtag.js) - Google Analytics