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