Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions zktest/src/archive/test2/B-ZK-4970.zul
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
B4970.zul

Purpose:

Description:

History:
Fri Jul 23 10:38:57 CST 2021, Created by rudyhuang

Copyright (C) 2021 Potix Corporation. All Rights Reserved.

-->
<zk>
<label multiline="true">
1. Click the button.
2. You should see a Listbox with some data.
</label>
<div apply="org.zkoss.zktest.test2.B4970Composer"/>
</zk>
52 changes: 52 additions & 0 deletions zktest/src/org/zkoss/zktest/test2/B4970Composer.java
Original file line number Diff line number Diff line change
@@ -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<Div> {
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(
"<div apply='${arg.innerComposer}'><listbox/></div>", "zul",
null,
Collections.singletonMap("innerComposer", (Composer<Div>) div2 -> {
div2.addEventListener("onInitModel", event2 -> {
Listbox listbox = (Listbox) div2.getFirstChild();
listbox.setModel(new ListModelList<>(Arrays.asList("aaa", "bbb", "ccc")));
listbox.setItemRenderer((ListitemRenderer<String>) (item, data, index) -> item.setLabel(data));
});
Events.postEvent("onInitModel", div2, null);
}));
});
}
}
32 changes: 32 additions & 0 deletions zktest/test/java/org/zkoss/zktest/zats/test2/B_ZK_4970Test.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
1 change: 1 addition & 0 deletions zul/src/org/zkoss/zul/impl/ListboxDataLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down