這邊我們繼續介紹當使用者選擇了 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
package org.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dao.CountryDao; import org.dao.impl.CountryDaoImpl; import org.pojo.Country; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.SuspendNotAllowedException; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.util.GenericForwardComposer; import org.zkoss.zul.Radiogroup; import org.zkoss.zul.Window; public class DataHandleController extends GenericForwardComposer { private Country country = new Country(); //省略.... public void getCurrent(){ //return country; } public void setCurrent(Country country){ this.country = country; //用 Map 集合來帶所需傳遞的參數 Map params = new HashMap(); params.put("id", country.getId()); //使用 Executions.createComponents 建立一個新的 Window Window pop = (Window)Executions.createComponents("/index.zul", null, params); pop.setClosable(true); try { pop.doModal(); //執行動作 popup } catch (SuspendNotAllowedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
在以上成是中看到了,在選擇一個 listbox 中的某一個 item 時,會觸發事件到 setCurrent(Country)
這時候就可以在這邊做點手腳,運用 Executions 的 createComponents 方法來建立新視窗
如果需要傳遞參數時,還可以運用 Java 的 Map 集合將所需的資料傳入新的視窗中
接著看看新的視窗: index.zul
<?page title="Auto Generated index.zul"?>
<zk>
<window id="popwin" title="Hello World!!" border="normal" width="350px" height="350px" apply="org.controller.RetriverParams">
</window>
</zk>
在 以上的 window 元件中應用了一個 Controller RetriverParam.java 負責抓取參數並印出
package org.controller; import java.util.Map; import org.zkoss.zhtml.S; import org.zkoss.zk.ui.event.CreateEvent; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.ForwardEvent; import org.zkoss.zk.ui.util.GenericForwardComposer; public class RetriverParams extends GenericForwardComposer { // 新增該 window 的 create 事件 public void onCreate$popwin(Event e) throws Exception { CreateEvent ce = (CreateEvent) ((ForwardEvent) e).getOrigin(); //透過該事件的 getArg() 取的傳過來的 Map 集合物件 Map params = ce.getArg(); System.out.println(params.get("id")); } }下一篇介紹 如何運用 Javascript 開新視窗,並傳遞參數【ZK】Javascript 開新視窗
沒有留言:
張貼留言