您的問題是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文檔。
你可以發佈你的ZUL和可能的一些相關的邏輯嗎? – Tim 2012-04-17 11:51:03
如果您使用MVVM架構,那麼不要在zul頁面中使用id屬性 – 2013-05-14 06:17:42