ZK框架學習總結

 ZK框架學習總結

      

ZK框架學習總結... 1

1       ZK框架簡介... 3

2       安裝部署開發環境... 3

2.1        工具及安裝... 3

2.2        ZK環境的配置... 3

3       快速搭建頁面... 3

4       幫助文檔... 3

5       沒有Javascript的事件響應... 3

5.1        組件的事件... 3

5.2        組件與控制器... 3

6       搭建一個完整的WEB應用... 3

6.1        整合持久層... 3

6.2        整合Spring. 3

1          ZK框架簡介

ZK框架是一個用JAVA實現的簡單但是功能強大的表現層框架。它包括了一個基於Ajax的事件驅動引擎、這也是它的最大特色。可以做到沒有JavaScript,只通過ZUML(ZK User Interface Markup Language)這種標識語言即可做到界面創建和事件響應。

ZK的實現完全用java實現,開發過程中不會有任何的JavaScript代碼,但是通過將zul文件(ZK的源文件,類似於jsp文件)通過ZK引擎編譯後查看頁面源代碼,結果還是可以看到,ZK實現的本質還是通過JavaScript+CSS來處理異步請求的。

組件是ZK中最常見的元素。有點類似於JAVA Swing或者VB這樣的基於組件的編程。結合ZK Studio,可以達到可視化和動態地查看頁面效果。

特徵

1.     它是一個表現層工具。可以與hibernatespring等結合構建一個完整的WEB應用。

2.     以服務端爲中心的框架。它封裝了Ajax的後臺處理技術。服務端由兩個重要部分實現:ZK加載器,ZK異步更新引擎。前者負責解析URL請求,生成HTML頁面;後者負責監聽和處理客戶端的Ajax請求,同時更新ZK組件的屬性,然後將Ajax響應發回給客戶端。

3.     基於組件的GUI。頁面的可視部分都是由組件構成。類似於HTML標籤,但是比HTML標籤更靈活。

不足之處:

1.       ZKJAVA結合緊密。由於ZK的組件都是由JAVA實現,所以對組件的控制也僅限於用JAVA語言。無法與控制層解耦。

2.       學習資料和文檔比較少。最全面的ZK應用其實還是官方的DEMO。連《ZK框架——Ajax開發實踐》一書都是用的官方例子。所以對有些事件或者屬性只有自己探索。

3.       ZK的測試比較薄弱。對頁面無法用工具進行測試。只能用手動測試。調試也不方便。

2          安裝部署開發環境

2.1      工具及安裝

需要安裝的工具有JDKTomcat(或者其他服務器)、My Eclipse(或者Eclipse)、 ZK開發包、ZK StudioJDKTomcatMy Eclipse安裝都不用介紹了,主要介紹ZK相關的部門。我的環境是JDK 1.6.0_16+Tomcat 6+My Eclipse 6.0

準備工作:

l         下載ZK包和demohttp://www.zkoss.org/download/zk.dsp。在Windows下開發選擇zk-bin-5.0.2.zipLinux下選擇zk-bin-5.0.2.tar.gz。下載好後還需要下載一個demo包。這個demo包裏面包含了一些xml模板,創建ZK頁面時可以根據模板快速生成。demo下載選擇zk-demo-5.0.2.zip

l         然後下載ZK StudioZK StudioMy Eclipse一個插件。提供了對ZK文件的時時查看和組件的可視化編輯以及一些通用頁面原型。最好還是下載這個插件,方便開發。這個插件可在線安裝或者直接下載。安裝步驟可參考頁面:http://www.zkoss.org/download/zkstudio.dsp。安裝好後的界面如下:

 

1 ZK Studio界面1

 

2 ZK Studio界面2

2.2      ZK環境的配置

l         解壓zk-bin-5.0.2.zip,創建用戶自定義庫:在My Eclipse裏面選擇windows->Preferences->JAVA->Build Path->User Libraries。添加3個用戶庫。名字隨便取,可以分別叫:ZK Ajax FrameZK Ajax Framework Extendsion以及ZK Ajax Framework Forge Library。分別對應zk-bin-5.0.2目錄結構中dist下的liblib/ext以及lib/zkforget中的jar包。配置好後的用戶庫如下圖:

 

3 自定義的用戶庫

l         添加xsd到用戶xml catalog entry裏。這是爲了確保可以更好的地使用My Eclipse XML Editor的功能。打開window->preferences->My Eclipse->Files and Editors->XML->XML Catalog。添加zk-bin-5.0.2/dist/xsd/zul.xsd

l         添加xml文件模板:將zkdemo\WebContent\WEB-INF下的lang-addon.xmlportlet.xmlzk.xmlweb.xml四個文件複製到My Eclipse安裝目錄下的myeclipse\eclipse\plugins\com.genuitec.eclipse.wizards_6.0.1.zmyeclipse601200710 \templates\xml。文件夾名字可能因爲My Eclipse版本不同而不同。只要以com.genuitec.eclipse.wazardsXXX這樣開頭的文件夾就行。然後將這四個文件分別改名爲:LangAddon.vtlPortlet.vtlZK.vtlZKWeb.vtl。打開四個文件,將<?xml version="1.0" encoding="UTF-8"?>這一行都改成<?xml version="1.0" encoding="$encoding"?>。繼續在這個xml文件夾裏面新建一個名爲ZUL.vtl的文件。內容如下:

l        

<?xml version="1.0" encoding="$encoding"?>
<?page title="title" ?>
<zk 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 
">
</zk>

 


修改 My Eclipse安裝目錄下的myeclipse\eclipse\plugins\com.genuitec.eclipse.wizards_6.0.1.zmyeclipse601200710 \ templates.xml。在<!-- XML templates -->後面添加如下代碼:

<template
    context="com.genuitec.eclipse.wizards.xml"
    script="templates/xml/ZKWeb.vtl"
    name="XML template for a web.xml file with ZK capability"/> 
    <template
    context="com.genuitec.eclipse.wizards.xml"
    script="templates/xml/LangAddon.vtl"
    name="XML template for a lang-addon.xml file for ZK"/>
    <template
    context="com.genuitec.eclipse.wizards.xml"
    script="templates/xml/Portlet.vtl"
    name="XML template for a port-let.xml file for ZK"/> 
    <template
    context="com.genuitec.eclipse.wizards.xml"
    script="templates/xml/ZK.vtl"
    name="XML template for a zk.xml file"/>
    <template
    context="com.genuitec.eclipse.wizards.xml"
    script="templates/xml/ZUL.vtl"

    name="XML template for a *.zul file"/>

l         添加新的文件類型。打開window->preferences->general-content types,給Java Source File添加*.zs,給XML添加*.zul,給JSP添加*.dsp,給HTML添加*.zhtml。到此,ZK環境完全搭建完成。開發好的ZK應用可以直接打成war包進行部署。十分地簡單。

3          快速搭建頁面

有兩種方式創建ZK Project。第一種方式是直接在ZK Welcome Page裏面新建一個ZK工程: ,這樣不用再添加ZK庫。第二種方式是先創建一個Web Project,然後在Build Path裏面添加剛纔添加的三個User Libraries。然後在WebRoot裏面添加zul文件即可。添加zul文件要選擇新建XML Advanced Tempaltes文件。

打開zul文件可以選擇Open with Zul Editor。這樣便可以利用zk studio的可視化編程進行開發。

除了ZK自己提供的一些組件外,html的標籤在ZK中完全可以繼續用。但是爲了避免ZK解釋HTML標籤,通常要使用<![CDATA[ ]]>HTML標籤圍入其中。換言之,他們並不是子組件。而是被存儲在content屬性內。

組件可以從 直接拖拉進代碼區,然後可以在 中查看和設置組件支持的所有屬性和事件。其特點就是高效地組建頁面。如果不添加任何JAVA代碼,那麼創建一個頁面的效率不亞於直接用Axure創建界面原型。圖4是一個界面demo。無任何jsCSS代碼。當然,ZK框架並不排斥使用CSS代碼。利用style屬性可以設置CSS樣式,還可以通過<style src=" CSS文件"/>加載CSS文件。

 

4 快速創建頁面範例

4          幫助文檔

最好的幫助文檔其實是zkoss官網的一些文檔。比如:開發手冊(http://zh.zkoss.org/doc/devguide/index.html)。但是對於開發人員來說,官方的幫助文檔其實還不夠的。ZK總提供上百個組件和13個指令。每個組件都會有1060個不同的屬性和事件響應。所以,對於這些屬性及用法沒有一個好的類似java api文檔那樣的東西,實在是會不知所措。所以在zkoss官方還提供了zkoss組件的java apihttp://www.zkoss.org/javadoc/latest/zk/),方便開發人員

5          沒有Javascript的事件響應

5.1      組件的事件

每個組件都支持一些事件。如onClickonOK,onClose等。以下是window組件所支持的事件:

 

5 window組件支持的事件

ZK異步更新引擎的支持下,組件的屬性可以被動態改變。首先獲得組件對象,然後設置值。獲得組件可以通過JAVA代碼或者EL表達式。同一ID空間中的可以用getFellow(組件id),還有一種方法是利用org.zkoss.zk.ui.api包中的Path類可以很方便地獲取組件。Path.getComponent(組件路徑)。如獲取以下頁面的label組件的value值可以這樣寫:

<?page id=”page1”?>

<window id=”winA”>

<label id=”labelA” value=”Label A” />

</window>

<zscript><![CDATA[

alert(Path.getComponent(“/winA/labelA.value”));

]]></zscript>

跨頁面的組件訪問可以用//表示當前桌面。如要在page2中訪問page1idwinAwindow組件,可以這樣寫Path.getComponent(//page1/winA)

    當然,ZK也不排除使用javascript。如:

<script type="text/javascript"> 

function testAlert() { 

    alert("調用javascript成功!"); 

} 

</script> 

  <button label="SayHello"> 

    <attribute name="onClick">     

    <![CDATA[     

        Clients.evalJavaScript("testAlert();"); 

    ]]>     

    </attribute>     

</button> 

    事件還可以在JAVA代碼中進行註冊。註冊後與直接寫在zul頁面中的效果是一樣的。比如我們可以先定義一個事件類:

public class MyListener implements EventListener{

         @Override

         public void onEvent(Event event) throws Exception {

                   // TODO add some methods

                   ……

                   }}

然後可以在另外一個類中註冊它。

public class ShowMessage extends Window {

public void onCreate() throws InterruptedException{ //does initialization

         getFellow("btnAddUser").addEventListener("onClick", new MyListener());

}}

這樣我們就可以通過use="ibatis.ShowMessage"來調用MyListener裏面定義的一些方法了。

5.2          組件與控制器

將組件和組件的控制代碼最好進行分離。利用組件的use或者applay屬性將JAVA代碼和zul頁面進行關聯。如:<window id="main" width="100%" height="100%" apply="zktest.borderlayout.BorderLayoutComposer">或者<listbox id="testListID" width="800px" rows="5" use="zktest.jianer.ListTestBean">

    我們知道,一個經典的MVC框架中,視圖,控制器和模型都是必須要有的。在一個WEB工程中DAO層的引入比較容易,比如說hibernate或者說淘寶現在用的比較多的iBatis。而控制器從何而來。視圖如何與控制器互相傳遞數據?這裏就用到了zul頁面和java代碼的分離。分離出java代碼後,java代碼可以很容易與DAO層打交道,而獲取視圖層的數據也可以輕鬆通過getFllow獲取到組件進行操作。這樣MVC三層便實現了。另外,在Web工程中還可以配置Spring進行類管理。

6          搭建一個完整的WEB應用

6.1      整合持久層

要想程序與數據庫打交道,有很多種方式。直接寫JDBC當然是最笨的一種,現在淘寶的JAVA應用普遍採用iBatis作爲持久層,沒有采用hibernate是因爲考慮到hibernate的效率問題,所以我也試着將iBatis配置進工程裏面。

首先當然是有一個ZK的工程。參照前面第3章的內容。在My Eclipse裏面新建好一個Web工程。然後在Build Path裏面配置需要的包。這裏我用到的是MySQLJDBC包和iBatis的包。都加入到Build Path裏面: 。然後進行iBatis的配置。

要使iBatis跑起來,至少需要3個配置文件。 SqlMap.properties用來配置數據庫連接的相關信息。如用戶名,密碼,連接字符串等。SqlMapConfig.xml用來指定數據源、SqlMap.properties的位置和用到的sqlMap。而這個User.xml就是一個sqlMap。用來配置sql語句、返回類型,傳入參數和名字的。在sqlMap類裏面就通過名字對sql語句進行調用。一切配置好後就可以開始正式編碼了。

6.2      整合Spring

MyEclipse裏面添加Spring相當容易。直接在工程上點右鍵,選擇My Eclipse->Add Spring Capabilities。這樣就將Spring的包引入了進來,並且自動生成了Spring的配置文件:applicationContext.xml。在applicationContext.xml裏面便可以進行bean的配置。更多Spring的用法可以參照相關的資料。在此便不多說。

通過配置iBatisSpring後便可分層對一個Web應用進行開發了。JAVA代碼處理業務邏輯,充當控制層。ZK負責界面展示。iBatis負責持久層

暱稱:狂飛

QQ:18670340

MSN:[email protected]

注意事項:本文均爲作者個人編寫如果紕漏

請給予指出,轉載請標明出處

 

 

 

發佈了83 篇原創文章 · 獲贊 3 · 訪問量 5122
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章