首先先來看看 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 的某欄位時,即開新視窗並帶參數過去的 實作
沒有留言:
張貼留言