這邊我們繼續介紹當使用者選擇了 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 開新視窗
沒有留言:
張貼留言