ZK的实际应用:MVVM –加载和渲染数据

先前的文章简要介绍了RIA框架ZK,以及它CSS Selector启发式控制器机制如何通过使在控制器类中引用UI组件的任务变得相对灵活来减轻UI更改所带来的一些负担。

然后,我们在上一篇文章中探讨了ZK中的MVVM模式如何允许单个ViewModel提供不同的视图。

这篇文章标志着一系列文章的开始,这些文章将逐步使用ZK从头开始构建一个简单的应用程序。

目的

现在,我们将构建一个简单的库存管理功能,该功能仅限于将数据收集从数据库加载和呈现到表中。

ZK实战功能

  • MVVM:加载
  • 模板标签

使用MVVM将数据加载并呈现到表中

假设有一个名为“ Item”的对象的集合,并且有一个DataService类,该类负责缓存和与数据库(MongoDB和Morphia)进行通信。

@Entity("items")
public class Item {@Idprivate ObjectId id;private String name;private String model;private int qty;private float price;private Date datemod;// getters & setters

要将数据呈现到ZK中所示的表中,我们需要实现以下部分:

  • 一个将用作我们的ViewModel的POJO
  • ZK标记文件作为我们的演示文稿

ViewModel类

public class InventoryVM {private List<item> items;public List<item> getItems() throws Exception{items = DataService.getInstance().getAllItems();return items;}}
  • 第3行,需要将项目列表声明为VM类的属性
  • 第5行,我们需要提供一种getter方法,以便Binder可以检索项目列表。 概括地说,活页夹保留了对UI组件和ViewModel的引用,因此它可以使双方的数据以及ViewModel中的调用命令方法保持同步,因为View中触发了事件。

标记

<window apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('lab.sphota.zk.ctrl.InventoryVM')"><listbox model="@load(vm.items) "><listhead><listheader label="Name" /><listheader label="Model" /><listheader label="Quantity" /><listheader label="Unit Price"/><listheader label="Last Modified" /></listhead><template name="model" var="item" ><listitem><listcell><textbox value="@load(item.name)" inplace="true" /></listcell><listcell><textbox value="@load(item.model)" inplace="true" /></listcell><listcell><spinner value="@load(item.qty)"  inplace="true" /></listcell><listcell><decimalbox value="@load(item.price)" inplace="true" format="#,###.00"/></listcell><listcell label="@load(item.datemod)" /></listitem></template></listbox>
</window>
  • 第1行,我们应用ZK的BindComposer的默认实现。 它负责实例化我们的VM实例以及Binder实例。
  • 第2行,我们提供了要实例化的ViewModel的完整类名,并为其提供了ID(在本例中为“ vm”),以供将来参考
  • 在第3行中,我们将一个数据模型(作为ViewModel实例的属性制作)分配给列表框。
  • 在第11行,我们指示Template组件迭代给定的集合。 我们还声明了一个名为“ item”的变量,该变量将迭代处理集合中的每个Item对象。 或者,我们可以省略变量声明,并使用关键字“ each”来引用数据对象(Item)。
  • 在第14、17、20、23、26行中,我们检索要在列表框中显示的Item属性。
  • 在这里,我们使用Listcell内的输入元素(文本框,微调框,十进制框)来预期将来可编辑表的实现。 如果未选择这些属性,则“ inplace = true”属性会将这些输入元素呈现为常规标签。



包起来

ZK Binder是ZK MVVM工作的核心。 它包含对UI组件和ViewModel的引用。 ViewModel类只是一个POJO,我们在其中声明和分配数据模型。 它公开了getter方法,因此Binder可以检索数据并将其绑定到各自的带注释的UI组件。 然后,template标签允许我们相对于数据模型迭代地呈现UI组件。 在我们的例子中,使用模板标记通过bean集合迭代地呈现5个Listcell的行,每个单元具有bean属性。

在下一篇文章中,我们将实现“添加”功能,以便我们可以使用MVVM的表单绑定将新条目保存到现有清单中。

参考 ZK开发人员参考

参考: ZK in Action [0]:MVVM –在Tech Dojo博客上从JCG合作伙伴 Lance Lu 加载和渲染数据 。


翻译自: https://www.javacodegeeks.com/2012/07/zk-in-action-mvvm-load-and-render-data.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建一个简单的mybatis框架

一、Mybatis介绍 MyBatis是一个支持普通SQL查询&#xff0c;存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射&#xff0c;将接口和Java的POJO&#xff08;Pla…

定时操作范例

1 package timetask.demo;2 3 import java.text.SimpleDateFormat;4 import java.util.Date;5 import java.util.Timer;6 import java.util.TimerTask;7 8 /*9 * time类 是一个线程实施&#xff0c;可以用来实现在某一个时间或者某一个时间段后安排某一个任务执行一次或者定期…

c语言空格符 r t,c语言中、\t \r \n 和空格什么意思

具体意思&#xff1a;都是转义字符&#xff0c;空格就是单纯的空格&#xff0c;输入时可以输入空格\t 跳格 \r 回车 \n 换行\\ 反斜杠 \a 警告 \b 退格 \f 换页 \v 垂直跳格 \ddd ddd 是 1、2 或 3 位八进制数字。转义字符串(Escap…

如何在运行时更改日志记录级别

在运行时中更改日志记录级别很重要&#xff0c;这主要在生产环境中非常重要&#xff0c;在生产环境中&#xff0c;您可能希望在有限的时间内进行调试日志记录。 好了&#xff0c;更改根记录器非常简单–假设您有一个具有所需记录级别的输入参数&#xff0c;只需获取根记录器并…

扩展中国剩余定理

转自&#xff1a;http://blog.csdn.net/clove_unique/article/details/54571216 对于两个方程$x\equiv c_1\pmod {m_1}$$x\equiv c_2\pmod {m_2}$将其合并为一个方程&#xff0c;有解条件为$(m1,m2)|(c2-c1)$$m\frac{m1m2}{(m1,m2)}$$c(inv(\frac{m1}{(m1,m2)},\frac{m2}{(m1,m…

易语言添加ctrl c键,易语言操作快捷键汇总

以下是关于易语言的快捷键内容&#xff1a;预览被设计窗口 CtrlEnter运行 F5终止运行 CtrlF5编译 F7菜单编辑器 CtrlE即时帮助 F1在编辑窗口之间跳转。按下 Ctrl 键后不放&#xff0c;然后反复按 Tab 键可以在目前所有的编辑窗口之间跳转&#xff1b;按下 Ctrl 键后同时按下 Ta…

在代理类中引用动态代理

在Stackoverflow中有一个有趣的问题 &#xff0c;关于Spring Bean如何获​​得对由Spring创建的代理的引用以处理事务&#xff0c;Spring AOP&#xff0c;缓存&#xff0c;异步流等。需要对代理的引用&#xff0c;因为如果存在对自身的调用通过代理bean&#xff0c;此调用将完全…

Array的用法总结-swift

Araay是有序的数据集&#xff0c;在OC中分为不可变数组NSArray和可变数组NSMutableArray&#xff0c;在swift中只有常量和变量两种类型&#xff0c;声明成变量那就可以说明是可变的了&#xff01; 学习时的具体的用法总结成如下的代码&#xff1a; //数组var arrInts [Int]()/…

Frame URl

http://www.zi-han.net/theme/hplus/?v4.1 http://webapplayers.com/inspinia_admin-v2.5/ http://baijunyao.com/article/67 转载于:https://www.cnblogs.com/shijiaoyun/p/6065755.html

linux的i o模型,浅谈Linux 网络 I/O 模型简介(图文)

1、介绍Linux 的内核将所有外部设备都看做一个文件来操作(一切皆文件)&#xff0c;对一个文件的读写操作会调用内核提供的系统命令&#xff0c;返回一个file descriptor(fd&#xff0c;文件描述符)。而对一个socket的读写也会有响应的描述符&#xff0c;称为socket fd(socket文…

handsontable 方法汇总

核心方法1.为handsontable添加钩子方法 addHook(key,callback):key为钩子方法名 例如&#xff1a;hot.addHook(beforeInit, myCallback); addHookOnce(key,callback)&#xff1a;添加只使用一次的方法&#xff0c;用完后自动删除 例如&#xff1a;hot.addHookOnce(beforeInit, …

swing中JTable的使用方法

1 public static void main(String[] args) {2 3 Student s1 new Student("张三", "001", 0);4 Student s2 new Student("李四", "002", 1);5 Student s3 new Student("王五", "003",…

android仿高德地图透明黑字,Android 仿高德地图可拉伸的BottomSheet

原标题&#xff1a;Android 仿高德地图可拉伸的BottomSheet2018安卓巴士开发者大会-上海站你一直期待的安卓技术盛宴即将登场&#xff01;前言最近项目中需要用到高德地图搜索结果后的结果展示的可拉伸控件。而我看到这个效果图&#xff0c;觉得这个就是一个slidingpanel&#…

Java EE 7中包含哪些JSR?

我开始填写所有应该加入Java EE 7的Java规范请求的表。 由于平台版本仍在确定中&#xff0c;因此某些细节很难确定。 完整的Java EE 7 EJB产品具有以下标准组件和API&#xff1a; 名称 版 描述 JSR 网页 轮廓 批处理 1.0 批量处理 352 Bean验证 1.1 Bean验证框…

[ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!

作为入门者来说。了解JavaScript中timer的工作方式是非常重要的。通常它们的表现行为并非那么地直观&#xff0c;而这是由于它们都处在一个单一线程中。让我们先来看一看三个用来创建以及操作timer的函数。var id setTimeout(fn, delay); - 初始化一个单一的timer&#xff0c…

android dropbox anr分析,Android如何分析排查ANR

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;在Android开发中&#xff0c;当程序发生异常时会抛出异常信息&#xff0c;先说下三种常见类型&#xff1a;列表内容KeyDispatchTimeout(谷歌default 5s&#xff0c;MTK平台上是8s) –主要类型按键或触摸事件在特定…

修改httpd默认端口号

Tomcat: vim /etc/httpd/conf/httpd.conf//别忘了service httpd restart Nginx: vim /etc/nginx/nginx.conf//完了之后service nginx restart 转载于:https://www.cnblogs.com/bincoding/p/6067054.html

整合弹簧,速度和瓷砖

我喜欢 Tiles&#xff0c; 并且听到了很多有关 Velocity的信息 。 它们似乎有不同的用途&#xff0c;并且据说很容易结合在一起&#xff0c;所以我决定试一试&#xff0c;并在Spring Web应用程序中同时使用它们。 集成实际上花费了许多小时&#xff0c;并且是一次真正的过山车&…

Android 软键盘自动弹出和关闭

在我们写修改信息或者搜索&#xff0c;修改密码等界面的时候&#xff0c;用户进入这个界面的主要目的就是输入修改/查找 某些信息&#xff0c;为了用户体验应该自动弹出软键盘而不是让用户主动点击输入框才弹出。 1.软键盘的自动弹出 private void showKeyboard(){InputMethodM…

android adb杀死服务,Android app是如何杀掉的

1. adb shell kill -9 pid_of_appAMS定义了AppDeathRecipientAPP 在 attachApplication -> attachApplicationLockedAMS里会注册 App 进程的 BinderDeath通知AppDeathRecipient adr new AppDeathRecipient(app, pid, thread);thread.asBinder().linkToDeath(adr, 0);当App进…