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

Multiple Selection by Button

17MDuchemin172.69.35.193357ceuAug 4, 2021 4:18:04 AMlink

resources

index.zulzul<zk> <window border="normal" title="hello" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('pkg$.VisiteClasseVM')"> <div> <vlayout form="@id('fx') @load(vm.selected) @save(vm.selected, before={'saveAndAdd1', 'saveAndAdd2'})"> <hlayout> <label value="Some text of data"/> <textbox value="@bind(fx.text)"/> </hlayout> <hlayout> <label value="List of elements of data"/> <listbox model="@bind(fx.elements)" multiple="true" selectedItems="@bind(vm.selectedElements) @converter(vm.formConverter)"> <template name="model" var="item"> <listitem> <listcell label="@load(item.elem)"/> </listitem> </template> </listbox> </hlayout> <hlayout> <label value="size of selection"/> <label value="@load(vm.selectedElements.size())"/> </hlayout> <hlayout> <label value="current selection"/> <label value="@load(vm.currentSelection)"/> </hlayout> <button label="remove" onClick="@command('removeSelected', fx=fx)"/> <button label="saveAndAdd1" onClick="@command('saveAndAdd1')"/> <button label="saveAndAdd2" onClick="@command('saveAndAdd2')"/> </vlayout> </div> </window> </zk> VisiteClasseVM.javajavaimport org.zkoss.zk.ui.*; import org.zkoss.zk.ui.event.*; import org.zkoss.zk.ui.util.*; import org.zkoss.zk.ui.ext.*; import org.zkoss.zk.au.*; import org.zkoss.zk.au.out.*; import org.zkoss.zul.*; import org.zkoss.bind.annotation.*; import org.zkoss.bind.*; import java.util.*; import java.util.stream.*; import org.zkoss.bind.Converter; public class VisiteClasseVM{ private Converter formConverter = new ProxiedListitemsConverter(); private Data selected = null; public Data getSelected() { return selected; } public void setSelected(Data data) { this.selected = data; } private Set<Elem> selectedElements = new HashSet<>(); public Set<Elem> getSelectedElements() { return selectedElements; } public void setSelectedElements(Set<Elem> selectedElementsSet) { this.selectedElements = selectedElementsSet; } @DependsOn({"selectedElements"}) public String getCurrentSelection() { return selectedElements.stream().map(e -> e.getElem()).collect(Collectors.joining(",")); } @Init public void init() { selected = new Data(); selected.addElement(new Elem("1")); selected.addElement(new Elem("2")); selected.addElement(new Elem("3")); selected.addElement(new Elem("4")); } @Command @NotifyChange({"selectedElements"}) public void removeSelected(@BindingParam("fx") Data form) { form.getElements().removeAll(selectedElements); BindUtils.postNotifyChange(null, null, form, "elements"); selectedElements.clear(); } @Command @NotifyChange({"selected", "selectedElements"}) public void saveAndAdd1() { selected.setText("saved1"); Elem newElem = new Elem("new"); selected.addElement(newElem); selectedElements.add(newElem); } @Command @NotifyChange({"selected", "selectedElements"}) public void saveAndAdd2() { selected.setText("saved2"); Elem newElem1 = new Elem("new1"); Elem newElem2 = new Elem("new2"); selected.addElement(newElem1); selected.addElement(newElem2); selectedElements.add(newElem1); selectedElements.add(newElem2); } public Converter getFormConverter() { return formConverter; } } Data.javajavaimport org.zkoss.zk.ui.*; import org.zkoss.zk.ui.event.*; import org.zkoss.zk.ui.util.*; import org.zkoss.zk.ui.ext.*; import org.zkoss.zk.au.*; import org.zkoss.zk.au.out.*; import org.zkoss.zul.*; import java.util.*; public class Data { public Data() { this.text = "new"; } private List<Elem> elements = new LinkedList<>(); public void addElement(Elem elem) { this.elements.add(elem); } public List<Elem> getElements() { return this.elements; } private String text; public String getText() { return text; } public void setText(String aText) { this.text=aText; } } Elem.javajavaimport org.zkoss.zk.ui.*; import org.zkoss.zk.ui.event.*; import org.zkoss.zk.ui.util.*; import org.zkoss.zk.ui.ext.*; import org.zkoss.zk.au.*; import org.zkoss.zk.au.out.*; import org.zkoss.zul.*; import java.util.*; public class Elem { public Elem() { this.elem=""; } public Elem(String txt) { this.elem=txt; } private String elem; public String getElem() { return elem; } public void setElem(String anElem) { this.elem=anElem; } public boolean equals(Object obj) { if (obj instanceof Elem) { Elem o = (Elem) obj; return Objects.equals(o.getElem(), getElem()); } else return false; } public int hashCode() { if (getElem() != null) return getElem().hashCode(); else return 0; } } ProxiedListitemsConverter.javajavaimport java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; import org.zkoss.bind.BindContext; import org.zkoss.bind.Converter; import org.zkoss.bind.proxy.FormProxyObject; import org.zkoss.lang.Classes; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.UiException; import org.zkoss.zul.ListModel; import org.zkoss.zul.Listbox; import org.zkoss.zul.Listitem; import org.zkoss.zul.ext.Selectable; public class ProxiedListitemsConverter implements Converter, java.io.Serializable { private static final long serialVersionUID = 201108171811L; @SuppressWarnings("unchecked") public Object coerceToUi(Object val, Component comp, BindContext ctx) { Listbox lbx = (Listbox) comp; final ListModel<?> model = lbx.getModel(); if (model != null && !(model instanceof Selectable)) { //model has to implement Selectable if binding to selectedItems throw new UiException("model doesn't implement Selectable"); } final Set<Listitem> items = new LinkedHashSet<Listitem>(); Set<Object> vals = val == null ? null : (Set<Object>) Classes.coerce(LinkedHashSet.class, val); if (vals != null && vals.size() > 0) { if (model != null) { ((Selectable<Object>) model).setSelection(vals); for(int i = 0; i < model.getSize(); i++) { Object modelEntry = model.getElementAt(i); if(modelEntry instanceof FormProxyObject && vals.contains(((FormProxyObject)modelEntry).getOriginObject())) ((Selectable<Object>) model).addToSelection(modelEntry); } } else { //no model case for (final Iterator<?> it = lbx.getItems().iterator(); it.hasNext();) { final Listitem li = (Listitem) it.next(); Object bean = li.getValue(); if(bean instanceof FormProxyObject) { bean = ((FormProxyObject)bean).getOriginObject(); } if (vals.contains(bean)) { items.add(li); }else { for (Object object : vals) { if(object instanceof FormProxyObject && ((FormProxyObject)object).getOriginObject().equals(bean)) { items.add(li); } } } } } } else if (model != null && !((Selectable<Object>) model).isSelectionEmpty()) { //model !=null and no selection ((Selectable<Object>) model).clearSelection(); } return model == null ? items : IGNORED_VALUE; } @SuppressWarnings("unchecked") public Object coerceToBean(Object val, Component comp, BindContext ctx) { Set<Object> vals = new LinkedHashSet<Object>(); if (val != null) { final Listbox lbx = (Listbox) comp; final ListModel<?> model = lbx.getModel(); if (model != null && !(model instanceof Selectable)) { throw new UiException("model doesn't implement Selectable"); } if (model != null) { Set<?> selection = ((Selectable<?>) model).getSelection(); if (selection != null && selection.size() > 0) { for (Object o : selection) { vals.add(o); } } } else { //no model final Set<Listitem> items = (Set<Listitem>) Classes.coerce(HashSet.class, val); for (Listitem item : items) { vals.add(item.getValue()); } } } return vals; } }