Processing...

Suggested case list:

Using timer to refresh a grid

383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlink

user model to move item to another listbox

120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlink

Disabled list item row passed to VM-1981

296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlink

Disabled list item row passed to VM-1981

295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlink

Disabled list item row passed to VM-1981

294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlink

grid sample with ListModel/RowRenderer

816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlink

grid sample with ListModel/RowRenderer

809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlink

grid sample with ListModel/RowRenderer

196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlink

grid sample with ListModel/RowRenderer

195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlink

grid sample with ListModel/RowRenderer

194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlink

grid sample with ListModel/RowRenderer

193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlink

grid sample with ListModel/RowRenderer

192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlink

grid sample with ListModel/RowRenderer

191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlink

Hierarchy table without using ZK PE/EE

1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlink

grid sample with ListModel/RowRenderer

128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlink

user model to move item to another listbox

1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlink

Using timer to refresh a grid

1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlink

Fire a event from child iframe

1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlink

Textbox input restriction sample

1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlink

Test web core taglib in ZUL

1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlink

Latest 10 Fiddles :

constraint binding textbox

3guest172.68.151.16220peldaDec 5, 2025 5:08:19 PMlink

Another new ZK fiddle

2guest172.68.151.16320peldaDec 5, 2025 5:07:51 PMlink

Another new ZK fiddle

1guest172.68.151.16220peldaDec 5, 2025 5:07:32 PMlink

Another new ZK fiddle

1peggypeng172.71.154.99364f4neDec 5, 2025 9:24:31 AMlink

tooltip example

2guest104.22.23.13rc1ntoDec 4, 2025 2:23:45 PMlink

Another new ZK fiddle

1guest172.69.134.2277t7602Dec 4, 2025 1:40:46 PMlink

Another new ZK fiddle

1peggypeng104.22.17.1802df6e3oDec 4, 2025 8:41:29 AMlink

onClose

1peggypeng172.68.87.248j8kd8aDec 3, 2025 4:10:26 AMlink

Another new ZK fiddle

1peggypeng172.69.134.2271rm7f4eNov 26, 2025 3:31:24 AMlink

ZK-5912-Suggestion

2rebeccalai104.22.20.1442qrmiiuNov 26, 2025 2:07:15 AMlink

Another new ZK fiddle

1guest14.141.67.2182ovptq9Jul 21, 2016 6:30:32 AMlink

resources

index.zulzul<zk> <style>#zk_err{ display: none !important; }</style> <div apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('pkg$.TestVM')"> <chosenbox model="@load(vm.parentModel)" sclass="parent" selectedObjects="@bind(vm.selectedParents)" width="300px" /> <chosenbox model="@load(vm.childModel)" /> <separator /> <button label="show selected" onClick="@command('show')" /> </div> </zk>TestVM.javajavaimport java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.zkoss.bind.BindUtils; import org.zkoss.bind.annotation.*; import org.zkoss.zk.ui.util.Clients; import org.zkoss.zul.ListModel; import org.zkoss.zul.ListModelList; /** * * @author chillworld */ public class TestVM { private final Map<Parent, List<Child>> map = new HashMap<Parent, List<Child>>(); private final ListModelList<Parent> parentModel = new ListModelList<Parent>(); private final ListModelList<Child> childModel = new ListModelList<Child>(); private Set<Parent> selectedParents = new HashSet<Parent>(); private Set<Child> selectedChilds = new HashSet<Child>(); @Init public void init() { for (int counter = 0; counter < 10; counter++) { Parent p = new Parent("parent " + counter); List<Child> childs = new ArrayList<Child>(); for (int counter2 = 0; counter2 < 20; counter2++) { childs.add(new Child(p, "child " + counter + "-" + counter2)); } map.put(p, childs); parentModel.add(p); childModel.addAll(childs); } } public ListModel<Parent> getParentModel() { return parentModel; } public ListModel<Child> getChildModel() { return childModel; } public Set<Parent> getSelectedParents() { return selectedParents; } public void setSelectedParents(Set<Parent> parents) { Set<Parent> difference; if (parents.isEmpty() && !selectedParents.isEmpty()) { System.out.println("fillFullChildModel."); fillFullChildModel(); } else if (!parents.isEmpty()) { if (selectedParents.isEmpty()) { System.out.println("clearing childmodel"); childModel.clear(); } else { difference = new HashSet<Parent>(selectedParents); difference.removeAll(parents); System.out.println("removing parents : " + difference); for (Parent p : difference) { System.out.println("Childs : " + map.get(p)); childModel.removeAll(map.get(p)); Set<Child> selected = new HashSet<Child>(); for (Child child : selectedChilds) { if (child.getParent().equals(p)) { selected.add(child); } } selectedChilds.removeAll(selected); } } difference = new HashSet<Parent>(parents); System.out.println("adding parents : " + difference); difference.removeAll(selectedParents); for (Parent p : difference) { System.out.println("Childs : " + map.get(p)); childModel.addAll(map.get(p)); } } childModel.clearSelection(); childModel.setSelection(selectedChilds); this.selectedParents = parents; } public Set<Child> getSelectedChilds() { return selectedChilds; } public void setSelectedChilds(Set<Child> childs) { if (selectedParents.isEmpty() && !childs.isEmpty()) { Parent p = childs.iterator().next().getParent(); // normally contains 1, otherwise parentsModel isn't empty selectedParents.add(p); BindUtils.postNotifyChange(null, null, this, "selectedParents"); } this.selectedChilds = childs; } private void fillFullChildModel() { childModel.clear(); childModel.clearSelection(); for (Entry<Parent, List<Child>> entry : map.entrySet()) { childModel.addAll(entry.getValue()); } } @Command public void show() { Clients.showNotification("Selected Parents now : " + selectedParents + " \nSelected Childs now : " + selectedChilds); } }Parent.javajavapublic class Parent { private String name; public Parent(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return name; } @Override public int hashCode() { int hash = 3; hash = 37 * hash + (name==null?0:name.hashCode()); return hash; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Parent other = (Parent) obj; return equals(this.name, other.name); } private static boolean equals(Object a, Object b) { return a == b || (a != null && a.equals(b)); } }Child.javajavapublic class Child { private Parent parent; private String name; public Child(Parent parent, String name) { this.parent = parent; this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Parent getParent() { return parent; } public void setParent(Parent parent) { this.parent = parent; } @Override public String toString() { return name; } @Override public int hashCode() { int hash = 3; hash = 67 * hash + (this.parent==null?0:this.parent.hashCode()); hash = 67 * hash + (name==null?0:name.hashCode()); return hash; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Child other = (Child) obj; if (!equals(this.name, other.name)) { return false; } return equals(this.parent, other.parent); } private static boolean equals(Object a, Object b) { return a == b || (a != null && a.equals(b)); } }