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 的好處之一

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

接者就來看看這段程式吧


package org.controller;
import java.util.List;
import java.util.ArrayList;

import org.dao.CountryDao;
import org.dao.impl.CountryDaoImpl;
import org.pojo.Country;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.Composer;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.SimpleListModel;
public class AccountGroupRetriver implements Composer
{ 
    private CountryDao countrydao = new CountryDaoImpl();;
 
    public void doAfterCompose(final Component target){
                  target.addEventListener("onCheck", new EventListener() { //add a event listener 4 onCheck
        public void onEvent(Event event) {
            //裝載資料的 List 集合
            List data = new ArrayList();
            //取得目標物件,即是那個 radiogroup
            Radiogroup rg = (Radiogroup)target;
            //透過 id 取得展示資料的 listbox     
            Listbox  box = (Listbox)target.getFellow("box");
                //check radiogroup 目前被篩選的 index, 並呼叫對應的 Dao 方法
             if(rg.getSelectedIndex() == 0){
                 data = (List)countrydao.getAllCountry();
             }else if(rg.getSelectedIndex() == 1){
                 data = (List)countrydao.getSelect_oneCountry();
             }else{
                 data = (List)countrydao.getSelect_twoCountry();
             }
                //最後這邊最重要, 運用 SimpleListModel 裝載 List 集合物件
                //作為listbox 的 Model 屬性值
                SimpleListModel newData = new SimpleListModel(data);
                box.setModel(newData);
        }
        });
    }
}


詳細的 DAO 實作就不在多述了,可以參考前一篇

下一篇介紹 【ZK】開新視窗

當User 選擇 listbox 的某欄位時,即開新視窗並帶參數過去的 實作

沒有留言:

張貼留言