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 :
constraint binding textbox
3guest172.68.151.16220peldaDec 5, 2025 5:08:19 PMlinkAnother new ZK fiddle
2guest172.68.151.16320peldaDec 5, 2025 5:07:51 PMlinkAnother new ZK fiddle
1guest172.68.151.16220peldaDec 5, 2025 5:07:32 PMlinkAnother new ZK fiddle
1peggypeng172.71.154.99364f4neDec 5, 2025 9:24:31 AMlinktooltip example
2guest104.22.23.13rc1ntoDec 4, 2025 2:23:45 PMlinkAnother new ZK fiddle
1guest172.69.134.2277t7602Dec 4, 2025 1:40:46 PMlinkAnother new ZK fiddle
1peggypeng104.22.17.1802df6e3oDec 4, 2025 8:41:29 AMlinkonClose
1peggypeng172.68.87.248j8kd8aDec 3, 2025 4:10:26 AMlinkAnother new ZK fiddle
1peggypeng172.69.134.2271rm7f4eNov 26, 2025 3:31:24 AMlinkZK-5912-Suggestion
2rebeccalai104.22.20.1442qrmiiuNov 26, 2025 2:07:15 AMlinkAdd Customer Test
8guest162.158.43.1893lhsbatJan 15, 2023 12:19:57 PMlinkresources
index.zulzul<zk>
<window border="normal" title="Add Biodata" apply="pkg$.TestComposer">
<separator height="10px"/>
<grid id="gridData">
<columns sizable="true">
<column label="First Name"/>
<column label="Middle Name"/>
<column label="Last Name"/>
<column label="Gender"/>
<column label="City"/>
<column label="Date of Birth"/>
</columns>
</grid>
<separator height="10px"/>
</window>
</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.*;
public class TestComposer extends GenericForwardComposer{
private Textbox txtFirstName;
private Textbox txtMiddleName;
private Textbox txtLastName;
private Textbox txtAddress;
private Listbox cmbCity;
private Datebox dtbBirthDate;
private Radiogroup rdgGender;
private Checkbox chkRead, chkWrite, chkTravel, chkOther;
private Label errFirstName;
private Label errLastName;
private Label errAddress;
private Label errCity;
private Label errGender;
private Label errHobby;
private Label errBirthDate;
private Grid gridData;
private ListModelList modelList;
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
applyCity();
modelList = new ListModelList();
gridData.setModel(modelList);
gridData.setRowRenderer(createRowRenderer());
}
private void applyCity() {
List<String> cities = Arrays.asList("Jakarta", "Bekasi", "Tangerang", "Bogor", "Depok");
for (String city : cities) {
Listitem item = new Listitem(city, city);
item.setParent(cmbCity);
}
}
private boolean doValidate() {
boolean flag = true;
errFirstName.setVisible(false);
if (txtFirstName.getValue().isEmpty()) {
errFirstName.setVisible(true);
flag = false;
}
errLastName.setVisible(false);
if (txtLastName.getValue().isEmpty()) {
errLastName.setVisible(true);
flag = false;
}
errAddress.setVisible(false);
if (txtAddress.getValue().isEmpty()) {
errAddress.setVisible(true);
flag = false;
}
errGender.setVisible(false);
if (rdgGender.getSelectedIndex() < 0) {
errGender.setVisible(true);
flag = false;
}
errCity.setVisible(false);
if (cmbCity.getSelectedIndex() <= 0) {
errCity.setVisible(true);
flag = false;
}
errBirthDate.setVisible(false);
if (dtbBirthDate.getValue() == null) {
errBirthDate.setVisible(true);
flag = false;
}
errHobby.setVisible(false);
if (!chkRead.isChecked() && !chkWrite.isChecked() && !chkTravel.isChecked() && !chkOther.isChecked()) {
errHobby.setVisible(true);
flag = false;
}
return flag;
}
private RowRenderer createRowRenderer() {
return new RowRenderer() {
public void render(Row row, Object data, int i) throws Exception {
final Biodata biodata = (Biodata)data;
new Label(biodata.getFirstName()).setParent(row);
new Label(biodata.getMiddleName()).setParent(row);
new Label(biodata.getLastName()).setParent(row);
new Label(biodata.getGender()).setParent(row);
new Label(biodata.getBirthPlace()).setParent(row);
new Label(biodata.getBirthDate().toString()).setParent(row);
}
};
}
public void onClick$btnSubmit(Event e) throws InterruptedException{
if (doValidate()) {
Biodata biodata = new Biodata();
biodata.setFirstName(txtFirstName.getValue());
biodata.setMiddleName(txtMiddleName.getValue());
biodata.setLastName(txtLastName.getValue());
biodata.setGender((String)rdgGender.getSelectedItem().getValue());
biodata.setBirthPlace((String)cmbCity.getSelectedItem().getValue());
biodata.setBirthDate(dtbBirthDate.getValue());
modelList.add(biodata);
}
}
}
Biodata.javajavaimport java.util.*;
public class Biodata {
private String firstName;
private String middleName;
private String lastName;
private Date birthDate;
private String birthPlace;
private String gender;
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public String getBirthPlace() {
return birthPlace;
}
public void setBirthPlace(String birthPlace) {
this.birthPlace = birthPlace;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
backup.zulzul<zk>
<window border="normal" title="Add Biodata" apply="pkg$.TestComposer">
<grid width="100%">
<columns>
<column label="" width="23%"/>
<column label="" width="2%"/>
<column label="" width="23%"/>
<column label="" width="2%"/>
<column label="" width="23%"/>
<column label="" width="2%"/>
<column label="" width="23%"/>
<column label="" width="2%"/>
</columns>
<rows>
<row valign="top">
<cell>
<vbox hflex="1">
<hbox>
<label value="First Name"/>
<label value="*" style="color:red;"/>
</hbox>
<vbox hflex="1">
<textbox id="txtFirstName" maxlength="30" hflex="1"/>
<label id="errFirstName" visible="false" value="Fisrt name is mandatory" style="font-style: italic; color:red;"/>
</vbox>
</vbox>
</cell>
<cell></cell>
<cell>
<vbox hflex="1">
<hbox>
<label value="Middle Name"/>
</hbox>
<vbox hflex="1">
<textbox id="txtMiddleName" maxlength="30" hflex="1"/>
</vbox>
</vbox>
</cell>
<cell></cell>
<cell>
<vbox hflex="1">
<hbox>
<label value="Last Name"/>
<label value="*" style="color:red;"/>
</hbox>
<vbox hflex="1">
<textbox id="txtLastName" maxlength="30" hflex="1"/>
<label id="errLastName" visible="false" value="Last name is mandatory" style="font-style: italic; color:red;"/>
</vbox>
</vbox>
</cell>
<cell></cell>
<cell>
<vbox hflex="1">
<hbox>
<label value="City"/>
<label value="*" style="color:red;"/>
</hbox>
<vbox hflex="1">
<listbox id="cmbCity" mold="select" hflex="1">
<listitem label="Please Select" selected="true"/>
</listbox>
<label id="errCity" visible="false" value="City is mandatory" style="font-style: italic; color:red;"/>
</vbox>
</vbox>
</cell>
<cell></cell>
</row>
<row valign="top">
<cell>
<vbox hflex="1">
<hbox>
<label value="Date of Birth"/>
<label value="*" style="color:red;"/>
</hbox>
<vbox hflex="1">
<datebox id="dtbBirthDate" format="dd-MM-yyyy" hflex="1"/>
<label id="errBirthDate" visible="false" value="Birth date is mandatory" style="font-style: italic; color:red;"/>
</vbox>
</vbox>
</cell>
<cell></cell>
<cell>
<vbox hflex="1">
<hbox>
<label value="Address"/>
<label value="*" style="color:red;"/>
</hbox>
<vbox hflex="1">
<textbox id="txtAddress" maxlength="200" multiline="true" rows="5" hflex="1"/>
<label id="errAddress" visible="false" value="Address is mandatory" style="font-style: italic; color:red;"/>
</vbox>
</vbox>
</cell>
<cell></cell>
<cell>
<vbox>
<hbox>
<label value="Gender"/>
<label value="*" style="color:red;"/>
</hbox>
<vbox>
<radiogroup id="rdgGender">
<radio id="rdMale" value="Male" label="Male"/>
<space width="10px"/>
<radio id="rdFemale" value="Female" label="Female"/>
</radiogroup>
<label id="errGender" visible="false" value="Gender is mandatory" style="font-style: italic; color:red;"/>
</vbox>
</vbox>
</cell>
<cell></cell>
<cell>
<vbox>
<hbox>
<label value="Hobby"/>
<label value="*" style="color:red;"/>
</hbox>
<vbox>
<hbox>
<checkbox id="chkRead" value="Reading" label="Reading"/>
<checkbox id="chkWrite" value="Writing" label="Writing"/>
<checkbox id="chkTravel" value="Travel" label="Travel"/>
<checkbox id="chkOther" value="Other" label="Other"/>
</hbox>
<label id="errHobby" visible="false" value="Hobby is mandatory" style="font-style: italic; color:red;"/>
</vbox>
</vbox>
</cell>
<cell></cell>
</row>
<row>
<cell colspan="6"></cell>
<cell>
<div align="right">
<separator height="10px"/>
<hbox spacing="5px" align="right">
<button id="btnCancel" label="Cancel" />
<button id="btnSubmit" label="Save" />
</hbox>
</div>
</cell>
<cell></cell>
</row>
</rows>
</grid>
<separator height="30px"/>
<grid>
<columns>
<column label=""/>
<column label=""/>
</columns>
<rows>
<row>
<cell>
<hbox spacing="5px">
<listbox id="cmbField" mold="select">
<listitem label="All" selected="true"/>
<listitem value="firstName" label="First Name"/>
</listbox>
<textbox id="txtSearch"/>
<button id="btnSearch" label="Search"/>
</hbox>
</cell>
<cell>
<div align="right">
<button id="btnAdd" label="Add New"/>
</div>
</cell>
</row>
</rows>
</grid>
<separator height="10px"/>
<grid id="gridData">
<columns sizable="true">
<column label="First Name"/>
<column label="Middle Name"/>
<column label="Last Name"/>
<column label="Gender"/>
<column label="City"/>
<column label="Date of Birth"/>
</columns>
</grid>
<separator height="10px"/>
</window>
</zk>