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.pswp.cn/news/372034.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372034.shtml
英文地址,請注明出處:http://en.pswp.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進…