0

使用ZK5的doModal失效

asked 2009-11-19 04:22:25 +0800

cchhcui gravatar image cchhcui
15

以前用ZK3.x写的代码,移植到ZK5,其中有一段:
Window winDialog = (Window)evt.getPage().getDesktop().getExecution().createComponents("x.zul",null,null);
winDialog.doModal();

xxDao.getList();
以前是可以在winDialog打开的时候,处于等待状态,关闭后,再执行xxDao.getList()。
现在是winDialog打开后直接就执行了xxDao.getList(),我并没有设定doHighlight等功能,不知道该如何解决?

delete flag offensive retag edit

9 Replies

Sort by » oldest newest

answered 2009-11-19 04:48:09 +0800

cchhcui gravatar image cchhcui
15

我担心这是系统的一个bug吧,但愿不是这样,请帮我提供一种解决方法吧,如果不能解决,弹出窗口改变的内容,在原窗口没办法刷新,我只能想办法回调(callback)了,那就太惨了

link publish delete flag offensive edit

answered 2009-11-19 05:29:36 +0800

joylo0122 gravatar image joylo0122
688 1
www.zkoss.org

@cchhcui

您好 cchhcui ,目前ZK5還不是很穩定,可以的話建議還是使用3.6.3。
關於您發生的問題,是否方便提供簡單的測試code讓我們協助您?從這三行程式碼中,我不太清楚為什麼xxDao.getList()會關閉後才發生,除非doModal有做一些事...

/Joy

link publish delete flag offensive edit

answered 2009-11-19 09:10:17 +0800

cchhcui gravatar image cchhcui
15

updated 2009-11-19 09:44:17 +0800

你好!我建立了一个新project,把相关代码copy进来,可以复现这个问题,请问如何发送给你?
我的邮箱是:cchh_cui AT 163 dot com

link publish delete flag offensive edit

answered 2009-11-19 21:21:59 +0800

joylo0122 gravatar image joylo0122
688 1
www.zkoss.org

@cchhcui

檔案會很大嗎?還是能夠直接貼在這裡嗎?
如果這是一個ZK設計上的問題,應該不需要太多code就能夠呈現。

或是您也可以寄壓縮過的Dynamic web project到我的信箱.

/Joy

link publish delete flag offensive edit

answered 2009-11-19 22:24:35 +0800

cchhcui gravatar image cchhcui
15

有整个project比较容易Debug,已经发送到你的信箱,请查收。希望ZK越来越强!

link publish delete flag offensive edit

answered 2009-11-19 22:46:15 +0800

joylo0122 gravatar image joylo0122
688 1
www.zkoss.org

@cchhcui

已收到,我先看看。

/Joy

link publish delete flag offensive edit

answered 2009-11-20 01:18:53 +0800

joylo0122 gravatar image joylo0122
688 1
www.zkoss.org

@cchhcui

由於你的寫法是用GenericComposer,跟現在的GenericForwardComposer已經有不少差異(主要是Lifecycle之類,呼叫與創建事件的時間點不同)。
大概測了一下你的code,目前有種簡單的方式提供您參考:

宣告一個eventlistener,將之註冊在winDialog上,讓onSave跟onExit被觸發時也會呼叫到這個eventListener的內容。

EventListener evtListener = new EventListener() {				
	@Override
	public void onEvent(Event arg0) throws Exception {
		// TODO Auto-generated method stub
		AllListDao.getList(win);
	}
};

public void onAdd(Event evt) {
        ...
	winDialog.addEventListener("onSave", evtListener);
	winDialog.addEventListener("onExit", evtListener);
	winDialog.doModal();
        ...
}

額外的建議,如果您的getList是為了listbox顯示資料,建議採用model替您完成。ListModel能妥善的管理listbox中的資料,
且有提供invalidate()方法能有效率的更新listbox內的資料。(你可以選擇重新select一次資料,或是直接取得已經select好的)

Regards
/Joy

link publish delete flag offensive edit

answered 2009-11-20 03:06:31 +0800

cchhcui gravatar image cchhcui
15

好的,非常感谢你的及时回复,看来我最好还是换成GenericForwardComposer好一些。
listbox显示方面,我是用来查数据库的实时数据的,数据量可能会很大,可能不太适合用model吧?我觉得可能会严重影响效率。ZK中是否可以处理从数据库的大量数据中读取某一页的数据呢?我觉得不太好实现吧

link publish delete flag offensive edit

answered 2009-11-20 03:23:48 +0800

joylo0122 gravatar image joylo0122
688 1
www.zkoss.org

@cchhcui

數據量其實並不在Model考慮的範圍內,這是SQL該去解決的問題,但是透過Model,他會有類似queue的效果(queue之於java就像view之於database)。
如果你要針對同一百筆資料做多次的修改或查詢,Model可以讓你重新整理頁面的時候不需要再去資料庫查一次,相信這能節約不少效能。
就實作面來說,就算你的database有上百萬筆資料,user每次需要看的部分也不過幾十或幾百筆,最多大概也是上千筆,在這樣的情況下,使用Model增進的
程式效率是可觀的(想想user如果查100次,SQL查100次所需要的時間吧。),這部分你可以比較看看。

有任何問題都歡迎上來論壇發問,祝您開發愉快^^

/Joy

link publish delete flag offensive edit
Your reply
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2009-11-19 04:22:25 +0800

Seen: 719 times

Last updated: Nov 20 '09

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More