2011年7月18日 星期一

【ZK】Javascript 開新視窗

本篇繼上一篇 【ZK】開新視窗 的應用之後

這邊我來介紹一下如何運用 Javascript 的技巧開啟一個新的視窗

當然 ZK 也能夠支援 Javascript 的運作

再運用 Javascript 開心視窗時,程式通常如下

window.open('目標 URL', '', '');  總共可帶三個參數進去

延續之前的例子,當 User select 某個 item 的時候就要開新一個視窗的話

可以在 listbox 的 onSelect 時,執行你所需要的 Javascript

程式大致如下 :


<attribute name="onSelect">    
       <![CDATA[
              String acc_id = Executions.getCurrent().getDesktop().getAttribute("select_id");
              String acc_name = Executions.getCurrent().getDesktop().getAttribute("select_name");
              String userId = Executions.getCurrent().getDesktop().getAttribute("loginId");

2011年7月7日 星期四

Hibernate 教學 - HQL 基本介紹

HQL 為 Hibernate 的查詢語句,他很類似於 SQL 但是比所能達到的功能有些許限制

重點是 HQL 為一種物件導向式的查詢語言,簡單說 HQL 是可以直接針對實體物件進行查詢、修改...等

而不像 SQL 是針對 Table,以下用一個最簡單的 select...from 來介紹 HQL

一般的 SQL 的 select * from t_product --- 指 撈出 t_product 這個 table 的所有欄位資料

如果是 HQL 會這樣寫 select p from Product p --- 這裡的 Product 為一個實體物件

以上這樣的寫法 可以簡化成 from Product as p 或是 from Product p

甚至還可以這樣寫 from Product

只要記得的是 from 後面接的是一個 Java 的實體類別,如果只是要撈出 t_product 的 name 欄位呢?

HQL : select p.name from Product --- 注意這裡的 p.name

p 目前唯一個 Product 的物件,p.name 表示了 p 物件的 name 屬性

2011年7月2日 星期六

【ZK】開新視窗

在前一篇的【ZK】Radiogroup 中介紹了如何透過 radiogroup 篩選 listbox 裡的資料

這邊我們繼續介紹當使用者選擇了 listbox 中的某一列時,需要開一個新的視窗,並傳入參數

這邊採用的方法是運用 selectedItem 屬性

所以先設定 listbox 的 selectedItem 屬性,如下所示:


<listbox id="box" multiple="true" rows="10"
             model="@{win$composer.allCountry}"
             selectedItem="@{win$composer.current}">


還記得原來的這個 Controller,程式可以在第一篇中找到【ZK】資料庫應用

接著在這個 Controller :DataHandleController.java 中這定 getter/setter

2011年7月1日 星期五

【ZK】Radiogroup

本篇繼續上一篇的 ZK 資料庫應用,這邊我們以一組 Radiogroup 來過濾 listbox 元件中的資料

首先先來看看 radiogroup 與 radio 的寫法


<radiogroup id="accountGroup" apply="org.controller.AccountGroupRetriver">
        <radio label="select1" selected="true"/>
        <radio label="select2"/>
        <radio label="select3"/>
radiogroup>

大致上跟一般在寫 HTML 是差不多的

注意 apply 屬性會對應到類似一個 controller 的 Java 程式,專門對這個 radiogroup

做事件偵測並篩選資料,這也是 ZK 的好處之一

它能夠跟針對各個的元件做類似服務的請求或是初始化的應用,相當方便。

接者就來看看這段程式吧

2011年6月25日 星期六

【ZK】資料庫應用

本篇範例將介紹在一個以 ZK 為基礎的 UI 下,讀取資料庫並顯示結果在 UI 上

首先先介紹 ZK 長用於顯示資料的 listbox 元件,如下圖








通常一個顯示資料的元件 listbox 來有包含兩個子元件 listhead、listitem

顧名思義 listhead 就是顯示最上面顯示欄位名稱的地方 listitem 則是顯示每筆資料的元件


<listbox id="box" multiple="true" rows="10" >
        <listhead>
            <listheader label="countryID"/>
            <listheader label="locationNO" />
            <listheader label="locationName" />
            <listheader label="countryName" />
        </listhead>
        <listitem>
            <listcell />
            <listcell />
            <listcell />
            <listcell />
        </listitem>
</listbox>   

2011年6月24日 星期五

【pureMVC】教學範例(三)

最後一篇要來介紹 Proxy 的內容了,通常在一般的 Proxy 會與遠端做連接

並處理一些邏輯,在針對做後的結果發出 Notification,以下的範例我並沒有用遠端的方法

來和後台要資源,以簡化這個 pureMVC 的範例

LoginProxy.as

package org.model
{
    import org.puremvc.as3.interfaces.IProxy;
    import org.puremvc.as3.patterns.proxy.Proxy;
    //繼承 Proxy, 並實作 IProxy 介面
    public class LoginFormProxy extends Proxy implements IProxy
    {
        public static const NAME:String = "LoginFormProxy";
        public static const LOGIN_SUCCESS:String = "login_success";
        public static const LOGIN_FAIL:String = "login_fail";
        public function LoginFormProxy()
        {
            super(NAME, null);
        }
       
        public function login(account:String):void
        {
            if(account == "tester1"){
                //發出登入成功事件
                sendNotification( LOGIN_SUCCESS, "welcome " + account);
            }else{
                //發出登入失敗事件
                sendNotification( LOGIN_FAIL, "login fail");
            }
        }
       
    }
}

2011年6月19日 星期日

【pureMVC】教學範例(二)

在第一篇我們已經將 UI 的元件分割出來後,就可以分別依照各個 Component 來建立 Mediator

以下先來看登入元件 "LoginForm.mxml" 的 Mediator -- LoginFormMediator.as


package org.view
{
    import org.view.component.LoginForm;
    import org.ApplicationFacade;
    import org.puremvc.as3.interfaces.IMediator;
    import org.puremvc.as3.interfaces.INotification;
    import org.puremvc.as3.patterns.mediator.Mediator;
    import flash.events.Event;
    import mx.controls.Alert;
    //須繼承 Mediator 並實作  IMediator 介面
    public class LoginFormMediator extends Mediator implements IMediator 
    {
        public static const NAME:String = "LoginFormMediator";
       
        public function LoginFormMediator(viewComponent:Object=null)
        {
            super(NAME, viewComponent);
            //註冊 LoginForm 的登入事件  "login", 當處發時呼叫  onLogin() 方法

2011年6月18日 星期六

【pureMVC】教學範例(一)

這裡以一個簡單的登入範例來呈現 pureMVC 的教學介紹

     首先在左圖的 Flex UI 中,紅色部分輸入名稱後
按下 Login 的 Button,在底下的 TextArea 會 show 出結果

     以這樣的案例來思考,整個流程會觸發哪些事件

這在 pureMVC 的應用開發中是很重要的一點


再來就是,在 UI 中有哪些元件會觸發哪些事情,哪些元件需要"關心"哪些事情

因此,對於 UI 的設計也很重要,能否將 UI 切割出合適元件,使得各個元件能簡單明瞭的知道

他們所關心或所發出的事件,而不至於造成混亂。故必須盡量讓每個元件各司其職

先預覽一下整個範例的目錄架構



首先來看看範例的組成,第一點最重要的是 Facade,以下為 ApplicationFacade.as


package org

{
    import org.controller.AppCommand;
    import org.controller.LoginCommand;
    import org.puremvc.as3.patterns.facade.Facade;
   
    public class ApplicationFacade extends Facade //須繼承 Facade
    {
        //以下為本範例的所有事件 (Notification) !!
        public static const START_UP:String="start_up"//AP初始化 事件
        public static const USER_LOGIN:String="login"; //使用者登入 事件
        //登入成功 事件
        public static const LOGIN_SUCCESS:String = "login_success";
        //登入失敗 事件

2011年6月17日 星期五

【pureMVC】基礎簡介

pureMVC 是以 MVC 架構為基礎的 Framwork,它並不侷限於應用在 Flex 的開發上

在手機、PHP、微軟基礎的架構下都可以使用它

pureMVC 除了 MVC 的基礎之外還額外新增了 Façade,以下說明這四項分類的要點


一、Façade

● Façade 是 pureMVC 的核心,他以單例模式的方法建構了一個唯一的Façade實例

● 一個 Façade 需要繼承 org.puremvc.as3.patterns.facade.Facade 

● Façade 都會定義整個應用程式會用到的所有事件(Notification)  例如以下:

   public static const USER_LOGIN:String="login"; //使用者登入 事件

● 通常都會覆寫(override) initializeController() function,這裡是用來關聯每個 Notification 所對應到的              
   Command  例如以下

   //註冊  USER_LOGIN Notification
   this.registerCommand(USER_LOGIN, LoginCommand);

2011年6月14日 星期二

Hibernate 教學 - 分頁處裡

對於現今網頁技術中,分頁的控制是必須面臨的問題,除了在 SQL 可以控制外

如果在 J2EE 的架構中,持久層採用了 Hibernate。對於分頁技術而言

Hibernate 也讓 HQLQBC 都提供了分頁技術的實現,Hibernate 透過簡單的方法達到分頁的效果

以下來看看 HQL 的實現方法

在 HQL 的方法中 主要是通過 setFirstResult()方法與 setMaxResults()方法來實現


在 setFirstResult(int index) 方法中,只要是用於查詢資料的開始的索引位置


index 即是你要查詢資料的起始位置
而  setMaxResults()方法中,就是最多要查詢出幾筆資料


index 即是你要查詢的筆數  以下舉一個例子,我們要查詢索引位址從5開始的10筆資料