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

test

1guest172.71.114.373ees0jfAug 31, 2022 10:21:31 AMlink

resources

index.zulzul<?page id="${param.pageId}"?> <?taglib uri="http://www.zkoss.org/dsp/web/core" prefix="c" ?> <zk> <div width="100%" vflex="1" apply="org.zkoss.bind.BindComposer" viewModel="@id('vm') @init('it.dp2000.conf.session.dispatcher.criteria.CriteriaBuilder')" validationMessages="@id('vmsgs')"> <borderlayout hflex="1" vflex="1"> <center autoscroll="true" vflex="1"> <vlayout vflex="1" style="overflow:auto;"> <tabbox vflex="1"> <tabs sclass="z-tabs-contentSub"> <tab sclass="z-tab-textSub"/> </tabs> <tabpanels> <tabpanel sclass="layoutProps no-padding-bottom"> <vlayout vflex="1" style="overflow:auto;"> <div id="criteriaContainer"> <listbox model="@load(vm.criterionList)" mold="paging" pageSize="5" hflex="1" style="border:none;"> <listhead> <listheader label="${c:l('dispatcher.criteria.builder.name')}" hflex="1"/> <listheader label="${c:l('dispatcher.criteria.builder.process')}" hflex="1"/> <listheader label="${c:l('dispatcher.criteria.builder.tasks')}" hflex="1"/> <listheader label="${c:l('dispatcher.criteria.builder.priority')}" hflex="1"/> <listheader label="${c:l('dispatcher.criteria.builder.grouping')}" hflex="1"/> <listheader hflex="1"> <button tooltiptext="${c:l('dispatcher.criteria.builder.add')}" iconSclass="z-icon-plus-circle" onClick="@command('addCriterion')"/> </listheader> </listhead> <template name="model" var="criterion"> <listitem value="@load(criterion)" style="border:none;"> <listcell label="@load(criterion.name)"/> <listcell style="@load(criterion.process)"/> <listcell style="@load(criterion.task)"/> <listcell style="@load(criterion.priority)"/> <listcell style="@load(criterion.grouping.name)"/> <listcell> <button iconSclass="z-icon-pencil" onClick="@command('modifyCriterion',criterionToModify=criterion)" tooltiptext="${c:l('dispatcher.criteria.builder.modify')}"/> <button iconSclass="z-icon-minus-circle" onClick="@command('removeCriterion', criterionToDelete=criterion)" tooltiptext="${c:l('dispatcher.criteria.builder.remove')}"/> </listcell> </listitem> </template> </listbox> </div> </vlayout> </tabpanel> </tabpanels> </tabbox> </vlayout> </center> <south> <div style="padding:5px;"> <div align="right" sclass="footer"> <div align="right" sclass="footer" visible="true"> <span class="z-button-os_cont_1"> <span class="z-button-os_cont_2"> <button id="saveCriteria" label="${c:l('dispatcher.criteria.save')}" tooltiptext="${c:l('dispatcher.criteria.save')}" sclass="btnSaveMap" onClick="@command('saveCriteria')"/> </span> </span> <span class="z-button-os_cont_1"> <span class="z-button-os_cont_2"> <button label="${c:l('dispatcher.criteria.export')}" tooltiptext="${c:l('dispatcher.criteria.export')}" sclass="btnExport" onClick="@command('downloadAllCriteria')"/> </span> </span> <span class="z-button-os_cont_1"> <span class="z-button-os_cont_2"> <button label="${c:l('dispatcher.criteria.deploy')}" tooltiptext="${c:l('dispatcher.criteria.deploy')}" sclass="btnInstallMap" onClick="@command('deployAllCriteria')"/> </span> </span> </div> </div> </div> </south> </borderlayout> <window visible="@load(vm.addCriterionWinVisible)" id="criterionWin" mode="highlighted" closable="false" contentStyle="overflow:auto;" width="600px" fulfill="self.onCreate" title="${c:l('dispatcher.criteria.builder.add')}" form="@id('proxyCriterion') @init(vm.proxyCriterion) @load(vm.criterion) @save(vm.criterion, before='saveCriterion')"> <grid hflex="1"> <rows> <row> <cell> <label hflex="1" value="${c:l('dispatcher.criteria.builder.name')}"> </label> </cell> <cell> <textbox hflex="2" value="@bind(proxyCriterion.name)" sclass="@load(not empty vmsgs['nameError'] ? 'errorfield':'mandatoryfield')"> </textbox> <div> <label value="@bind(vmsgs['nameError'])" style="color:red"/> </div> </cell> </row> <row> <cell> <label hflex="1" value="${c:l('dispatcher.criteria.builder.process')}"> </label> </cell> <cell> <combobox id="processesCombo" children="@load(vm.listOfProcesses)" hflex="2" readonly="true" sclass="@load(not empty vmsgs['processError'] ? 'errorfield':'mandatoryfield')" selectedItem="@bind(proxyCriterion.process)"> <template name="children"> <comboitem value="@load(each.id)" label="@load(each.description)"/> </template> </combobox> </cell> <cell> <label hflex="1" value="${c:l('dispatcher.criteria.builder.tasks')}"> </label> </cell> </row> <row> <cell> <label hflex="1" value="${c:l('dispatcher.criteria.builder.priority')}"> </label> </cell> <cell> <combobox id="criteriaCombo" model="@load(vm.priorityList)" hflex="1" readonly="true" sclass="@load(not empty vmsgs['priorityError'] ? 'errorfield':'mandatoryfield')" selectedItem="@bind(proxyCriterion.priority)"> <template name="model"> <comboitem value="@load(each)" label="@load(each)"/> </template> </combobox> </cell> <cell> <label hflex="1" value="${c:l('dispatcher.criteria.builder.grouping')}"> </label> </cell> <cell> <combobox id="groupingsCombo" model="@load(vm.groupingsList)" hflex="1" readonly="true" sclass="@load(not empty vmsgs['groupingsError'] ? 'errorfield':'mandatoryfield')" selectedItem="@bind(proxyCriterion.grouping)"> <template name="model"> <comboitem value="@load(each.name)" label="@load(each.name)"/> </template> </combobox> </cell> </row> <row> <cell> <label hflex="1" value="${c:l('dispatcher.criteria.builder.rule')}"> </label> </cell> <cell> <bandbox autodrop="true" readonly="true" value="@load(proxyCriterion.rule.name)" hflex="1" tooltiptext="@load(proxyCriterion.rule.fromXmlToRule().getFormula())" onOpen="@command('refreshRules')"> <bandpopup width="500px"> <listbox model="@load(vm.configuredRules)" height="250px" hflex="true" mold="paging" autopaging="true"> <listhead> <listheader label="${c:l('dispatcher.criteria.builder.rule.name')}" sort="auto(name)" width="40%" maxlength="30"/> <listheader label="${c:l('dispatcher.criteria.builder.rule.formula')}" maxlength="40" width="60%"/> </listhead> <template name="model"> <listitem onClick="@command('saveSelectedRule',selectedRule=each)"> <attribute name="onClick"> <![CDATA[ // alert(self.getParent().getParent().getParent()); // self.getParent().getParent().getParent().close(); ]]> </attribute> <listcell label="@load(each.name)" tooltiptext="@load(each.name)"/> <listcell label="@load(each.formula)" tooltiptext="@load(each.formula)"/> </listitem> </template> </listbox> </bandpopup> </bandbox> </cell> </row> <row> <cell> <label hflex="1" value="${c:l('dispatcher.criteria.builder.sorting')}"> </label> </cell> <cell> <grid hflex="1" model="@load(proxyCriterion.sortings)" style="border:none;" emptyMessage="${c:l('dispatcher.criteria.builder.sorting.emptyMessage')}"> <columns> <column width="40%" /> <column width="40%" /> <column width="20%"> <image src="~./img/plus16x16.jpg" onClick="@command('addSorting')" tooltiptext="${c:l('dispatcher.criteria.builder.sorting.add')}" style="cursor: pointer;" /> </column> </columns> <rows> <template name="model" var="sorting"> <row> <combobox children="@load(vm.listOfVariables)" selectedItem="@bind(sorting.variableName)" width="95%" readonly="true"> <template name="children"> <comboitem value="@load(each.id)" label="@load(each.description)" /> </template> </combobox> <combobox selectedItem="@bind(sorting.sortingType)" width="80%"> <comboitem label="${c:l('dispatcher.criteria.builder.sorting.increasing')}" value="${c:l('dispatcher.criteria.builder.sorting.value.increasing')}"/> <comboitem label="${c:l('dispatcher.criteria.builder.sorting.decreasing')}" value="${c:l('dispatcher.criteria.builder.sorting.value.decreasing')}"/> </combobox> <image src="~./img/cestino.gif" onClick="@command('removeSorting',sorting=sorting)" /> </row> </template> </rows> </grid> </cell> </row> </rows> </grid> <hlayout> <div> <span class="z-button-os_cont_1"> <span class="z-button-os_cont_2"> <button label="${c:l('cancel')}" tooltiptext="${c:l('cancel')}" sclass="btnSearch" onClick="@command('cancelCriterion', vmsgs=vmsgs)"> </button> </span> </span> </div> <div align="right" hflex="1"> <span class="z-button-os_cont_1"> <span class="z-button-os_cont_2"> <button label="${c:l('save')}" tooltiptext="${c:l('save')}" sclass="btnSearch" onClick="@command('saveCriterion')"> </button> </span> </span> </div> </hlayout> </window> </div> </zk>TestComposer.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.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.zkoss.bind.annotation.*; import org.zkoss.bind.proxy.ProxyHelper; public class TestComposer { private Criterion criterion; private Criterion proxyCriterion; private boolean addCriterionWinVisible = false; private final ListModelList<Decode> listOfProcesses = new ListModelList<>(); private final ListModelList<Decode> allTasks = new ListModelList<>(); private List<Integer> priorityList = Arrays.asList(1,2,3,4,5,6,7,8,9,10); private List<Decode> listOfVariables = new ArrayList<>(); @Init public void init() { for (int i=0; 1<5; i++) { listOfProcesses.add(new Decode("pid" + i, "pdesc" + i)); } criterion = new Criterion(); proxyCriterion = ProxyHelper.createFormProxy(criterion, Criterion.class); allTasks.setMultiple(true); for(int i=0; i<5; i++) { listOfVariables.add(new Decode("vid" + i, "vdesc" + i)); } } @Command @NotifyChange({"addCriterionWinVisible"}) public void addCriterion() { addCriterionWinVisible = true; } @Command @NotifyChange({"addCriterionWinVisible","proxyCriterion"}) public void cancelCriterion() { addCriterionWinVisible = false; } @Command @NotifyChange("configuredRules") public void refreshRules() { } @Command public void addSorting() { proxyCriterion.getSortings().add(new Sorting()); } @Command public void removeSorting(@BindingParam("sorting") Sorting sorting) { if (sorting != null) { proxyCriterion.getSortings().remove(sorting); } } public List<Decode> getAllTasks() { return allTasks; } public ListModelList<Decode> getListOfProcesses() { return listOfProcesses; } public List<Integer> getPriorityList() { return priorityList; } public boolean isAddCriterionWinVisible() { return addCriterionWinVisible; } public Criterion getCriterion() { return criterion; } public void setCriterion(Criterion criterion) { this.criterion = criterion; } public Criterion getProxyCriterion() { return proxyCriterion; } public void setProxyCriterion(Criterion proxyCriterion) { this.proxyCriterion = proxyCriterion; } public List<Decode> getListOfVariables() { return listOfVariables; } } Criterion.javajavaimport java.util.ArrayList; import java.util.List; public class Criterion { protected String name; protected String process; protected List<String> tasks; protected Integer priority; protected List<Sorting> sortings; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getProcess() { return process; } public void setProcess(String process) { this.process = process; } public List<String> getTasks() { if (this.tasks == null) { this.tasks = new ArrayList<>(); } return this.tasks; } public Integer getPriority() { return priority; } public void setPriority(Integer priority) { this.priority = priority; } public List<Sorting> getSortings() { if (this.sortings == null) { this.sortings = new ArrayList<>(); } return this.sortings; } }Decode.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.*; public class Decode implements Comparable<Decode> { private static final long serialVersionUID = -7536831885134382972L; private String id; private String description; public Decode() { } public Decode(String id, String description) { super(); this.id = id; this.description = description; } public String getId() { return id; } public String getDescription() { return description; } public void setId(String id) { this.id = id; } public void setDescription(String description) { this.description = description; } @Override public String toString() { return "Decode { id = " + this.id + " , description = " + this.description + " }"; } @Override public int compareTo(Decode obj) { int res = this.getId().toUpperCase().compareTo(obj.getId().toUpperCase()); return res; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (id == null) return ((Decode) obj).getId() == null; if (((Decode) obj).getId() == null) return false; return id.equalsIgnoreCase(((Decode) obj).getId()); } } Sorting.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.*; public class Sorting extends GenericForwardComposer{ private long id; private String nomeVariabile; private String tipoOrdinamento; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getNomeVariabile() { return nomeVariabile; } public void setNomeVariabile(String nomeVariabile) { this.nomeVariabile = nomeVariabile; } public String getTipoOrdinamento() { return tipoOrdinamento; } public void setTipoOrdinamento(String tipoOrdinamento) { this.tipoOrdinamento = tipoOrdinamento; } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } @Override public String toString() { return nomeVariabile + " " + tipoOrdinamento; } public Decode getOrdinamentoDecode() { return new Decode(this.nomeVariabile, ""); } public void setOrdinamentoDecode(Decode ordinamento) { this.nomeVariabile = ordinamento.getId(); } }