diff --git a/zktest/src/archive/test2/B-ZK-4970.zul b/zktest/src/archive/test2/B-ZK-4970.zul new file mode 100644 index 00000000000..5a6c58f5211 --- /dev/null +++ b/zktest/src/archive/test2/B-ZK-4970.zul @@ -0,0 +1,21 @@ + + + + +
+ \ No newline at end of file diff --git a/zktest/src/org/zkoss/zktest/test2/B4970Composer.java b/zktest/src/org/zkoss/zktest/test2/B4970Composer.java new file mode 100644 index 00000000000..08b9f36d42d --- /dev/null +++ b/zktest/src/org/zkoss/zktest/test2/B4970Composer.java @@ -0,0 +1,52 @@ +/* B4970Composer.java + + Purpose: + + Description: + + History: + Fri Jul 23 10:39:38 CST 2021, Created by rudyhuang + +Copyright (C) 2021 Potix Corporation. All Rights Reserved. +*/ +package org.zkoss.zktest.test2; + +import java.util.Arrays; +import java.util.Collections; + +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Events; +import org.zkoss.zk.ui.util.Composer; +import org.zkoss.zul.Button; +import org.zkoss.zul.Div; +import org.zkoss.zul.ListModelList; +import org.zkoss.zul.Listbox; +import org.zkoss.zul.ListitemRenderer; + +/** + * @author rudyhuang + */ +public class B4970Composer implements Composer
{ + private Div div; + + @Override + public void doAfterCompose(Div comp) throws Exception { + + Button button = new Button("create"); + comp.appendChild(button); + + button.addEventListener("onClick", event -> { + div = (Div) Executions.createComponentsDirectly( + "
", "zul", + null, + Collections.singletonMap("innerComposer", (Composer
) div2 -> { + div2.addEventListener("onInitModel", event2 -> { + Listbox listbox = (Listbox) div2.getFirstChild(); + listbox.setModel(new ListModelList<>(Arrays.asList("aaa", "bbb", "ccc"))); + listbox.setItemRenderer((ListitemRenderer) (item, data, index) -> item.setLabel(data)); + }); + Events.postEvent("onInitModel", div2, null); + })); + }); + } +} \ No newline at end of file diff --git a/zktest/test/java/org/zkoss/zktest/zats/test2/B_ZK_4970Test.java b/zktest/test/java/org/zkoss/zktest/zats/test2/B_ZK_4970Test.java new file mode 100644 index 00000000000..e8ed753c1a1 --- /dev/null +++ b/zktest/test/java/org/zkoss/zktest/zats/test2/B_ZK_4970Test.java @@ -0,0 +1,32 @@ +/* B_ZK_4970Test.java + + Purpose: + + Description: + + History: + Fri Jul 23 10:59:52 CST 2021, Created by rudyhuang + +Copyright (C) 2021 Potix Corporation. All Rights Reserved. +*/ +package org.zkoss.zktest.zats.test2; + +import org.junit.Assert; +import org.junit.Test; + +import org.zkoss.zktest.zats.WebDriverTestCase; + +/** + * @author rudyhuang + */ +public class B_ZK_4970Test extends WebDriverTestCase { + @Test + public void test() { + connect(); + + click(jq("@button")); + waitResponse(); + + Assert.assertEquals(3, jq("@listitem").length()); + } +} diff --git a/zul/src/org/zkoss/zul/impl/ListboxDataLoader.java b/zul/src/org/zkoss/zul/impl/ListboxDataLoader.java index 0e6dc9c1b20..d63b3bdc574 100644 --- a/zul/src/org/zkoss/zul/impl/ListboxDataLoader.java +++ b/zul/src/org/zkoss/zul/impl/ListboxDataLoader.java @@ -178,6 +178,7 @@ else if (max < 0) private void invalidateListitems() { //Bug 3147518: avoid memory leak //Also better performance (outer better than remove a lot) + if (!_listbox.isInitialized()) return; final Execution execution = Executions.getCurrent(); final String uuid = _listbox.getUuid(); final boolean isDeferInitModel = execution != null && execution.getAttribute("zkoss.Listbox.deferInitModel_" + uuid) != null;