2012-04-17 43 views
4

在我們的項目中,我們使用ZK作爲網頁。有一個combobox有列表。選中時,它通過onSelect從java對象中獲取數據,我已經給出了邏輯。 當我選擇一個有4 listboxes在該頁面根據選擇填充數據。當我第一次選擇時,沒有問題發生。ZK窗口在ID空間中不唯一

但第二次我得到一個錯誤彈出窗口,如「在窗口的ID空間不唯一」,並顯示列表框中的項目ID必須在選擇填充。

任何人都可以幫忙嗎?

注意:雖然它顯示此錯誤,我得到listboxes根據組合框選擇正確填寫。仍然我不能停止這種錯誤發生..

+2

你可以發佈你的ZUL和可能的一些相關的邏輯嗎? – Tim 2012-04-17 11:51:03

+0

如果您使用MVVM架構,那麼不要在zul頁面中使用id屬性 – 2013-05-14 06:17:42

回答

1

您的問題是ZK的id space ID的衝突。

一點背景知識..

ZK在運行時生成組件的ID,如果你打開瀏覽器的DOM,你會看到每個組件都有一些機器可讀的ID。

但是,您也可以給組件一個id。此ID不會轉到DOM,但可以讓您在應用程序中引用該組件。

這兩個不應該混淆。你遇到的衝突是後一種類型的ID;您正在Java代碼或ZUL文件中爲組件分配一個id,在運行時它不是唯一的。

您描述的情況下,第二次單擊時發生的情況是這裏的告訴故事標誌。您在事件中添加的內容中已經定義了一個ID,當您完成後,您不會刪除此內容。

請看下面的例子:

@Wire 
private Window myWindow; 

@Listen(Events.ON_CLICK + " = #myButton") 
public void onMyButtonClicked() { 
    Label myLabel = new Label("sean is cool"); 
    myLabel.setId("myLabel"); 
    myLabel.setParent(myWindow); 
} 

這將工作的第一次點擊myButton,但將引發第二次點擊你的錯誤。這是因爲第二個事件試圖將myLabel添加到myWindow,但在那裏已經有myLabel

有很多方法可以解決這個問題,這取決於你正在嘗試做什麼。
查看有關ID Spaces的更多ZK文檔。