Suggested case list:
Using timer to refresh a grid
383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlinkuser model to move item to another listbox
120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlinkDisabled list item row passed to VM-1981
296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlinkDisabled list item row passed to VM-1981
295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlinkDisabled list item row passed to VM-1981
294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlinkgrid sample with ListModel/RowRenderer
816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlinkgrid sample with ListModel/RowRenderer
809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlinkgrid sample with ListModel/RowRenderer
196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlinkgrid sample with ListModel/RowRenderer
195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlinkgrid sample with ListModel/RowRenderer
194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlinkgrid sample with ListModel/RowRenderer
193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlinkgrid sample with ListModel/RowRenderer
192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlinkgrid sample with ListModel/RowRenderer
191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlinkHierarchy table without using ZK PE/EE
1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlinkgrid sample with ListModel/RowRenderer
128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlinkuser model to move item to another listbox
1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlinkUsing timer to refresh a grid
1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlinkFire a event from child iframe
1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlinkTextbox input restriction sample
1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlinkTest web core taglib in ZUL
1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlinkLatest 10 Fiddles :
Another new ZK fiddle
4Avis172.68.106.17538t6r5fSep 20, 2024 10:07:14 AMlinkAnother new ZK fiddle
3Avis172.68.106.17438t6r5fSep 20, 2024 10:01:53 AMlinkAnother new ZK fiddle
2Avis172.68.106.13238t6r5fSep 20, 2024 10:00:37 AMlinkAnother new ZK fiddle
1Avis172.68.106.13238t6r5fSep 20, 2024 10:00:09 AMlinkAnother new ZK fiddle
117Avis172.68.106.1332hu0lh7Sep 20, 2024 10:00:03 AMlinkAnother new ZK fiddle
116Avis172.68.106.1332hu0lh7Sep 20, 2024 9:59:00 AMlinkAnother new ZK fiddle
115Avis172.68.106.1752hu0lh7Sep 20, 2024 9:57:21 AMlinkAnother new ZK fiddle
114Avis172.68.106.1752hu0lh7Sep 20, 2024 9:56:48 AMlinkAnother new ZK fiddle
113Avis172.68.106.1742hu0lh7Sep 20, 2024 9:55:50 AMlinkAnother new ZK fiddle
112Avis172.68.106.1752hu0lh7Sep 20, 2024 9:55:20 AMlinkAutocomplete in combobox , Onchange fired twice when tabing
2guest172.68.186.1792upc870Jul 16, 2021 8:31:54 AMlinkresources
index.zulzul<zk>
<div apply="pkg$.ComboboxAutocompleteComposer">
<combobox id="myCb"/>
</div>
</zk>ComboboxAutocompleteComposer.javajava
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.SelectEvent;
import org.zkoss.zk.ui.event.InputEvent;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.ComboitemRenderer;
import org.zkoss.zul.ListModel;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.ListModels;
public class ComboboxAutocompleteComposer extends SelectorComposer<Component> {
//Wire the component by it's ID to access it in the composer, more info in ZK MVC documentation
@Wire
private Combobox myCb;
//List of my Data, from anywhere
private List<MyEntityBean> myModel = new ArrayList();
//Implementation of submodel (auto filtered model) to use in combobox
private ListModel mySubModel;
// This method is called after composing the page, and is suitable to intialize values and additional components
@Override
public void doAfterCompose(Component comp) throws Exception {
//call super (required, or the page will not finish composition)
super.doAfterCompose(comp);
//generate some data
for (int i = 0; i < 50; i++) {
for (int j = 0; j < 5; j++) {
myModel.add(new MyEntityBean(i+"-"+j+"-id", i+"-"+j+"-data"));
}
}
//Comparator have many uses. Here, the comparator will return 0 is the item match the input string and should be included in the result)
Comparator myComparator = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
// the value of the combobox input
String input = (String) o1;
// the bean from the model
MyEntityBean bean = (MyEntityBean) o2;
return bean.getData().contains(input)?0:1;
}
};
//Generate a ListModel from the flat data, then a subModel from the listmodel
//Comparator is used when filtering to identify which bean should be included in the result
//This subModel will return the top 15 results from when filtering. Anything further will be ignored. You can implement your own submodel to have control over this process.
mySubModel = ListModels.toListSubModel(new ListModelList(myModel),myComparator,15);
myCb.setModel(mySubModel);
//Renderer will be called when creating the comboitem (each line in combobox) from the bean. You can implement your own renderer to control what is displayed
ComboitemRenderer<MyEntityBean> myRenderer = new ComboitemRenderer<MyEntityBean>() {
@Override
public void render(Comboitem item, MyEntityBean bean, int index) throws Exception {
//set the text of the row
item.setLabel(bean.getData());
//set the value of the row (available when receiving events from Combobox)
item.setValue(bean);
}
};
myCb.setItemRenderer(myRenderer);
}
//listen on onSelect event from the component ID (#) myCb. See SelectorComposer documentation for more info on the selectors
@Listen("onSelect=#myCb")
public void handleCbChange(SelectEvent<Comboitem, MyEntityBean> event){
//get the selected object, and get the bean from the object value. Do whatever your need with the bean from there :)
//Clients.log(((MyEntityBean)event.getSelectedItems().iterator().next().getValue()).getId());
}
@Listen("onChange=#myCb")
public void handleOnchange(InputEvent event) {
Clients.log("Onchange");
}
// Demo bean with 2 fields. data is the public label, ID is the internal key (not displayed to users)
public class MyEntityBean{
private String id;
private String data;
public MyEntityBean(String id, String data) {
super();
this.id = id;
this.data = data;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
}