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 AMlinkAnother new ZK fiddle
2guest113.22.218.2523k5bo3tNov 18, 2016 8:52:01 AMlinkresources
index.zulzul<?page title="Thiết lập công thức lương cho kỳ" contentType="text/html;charset=UTF-8"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk xmlns:h="native">
<window title="Thiết lập công thức lương cho kỳ" border="normal" width="100%" height="100%"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('com.evnit.hrms.spc.viewmodel.tienluong.ThietLapCongThucLuong_VM')">
<borderlayout hflex="1" vflex="1">
<center>
<borderlayout>
<north maxsize="300" splittable="true"
collapsible="true">
<h:table>
<h:tr>
<h:td>
<label value="Tháng" />
</h:td>
<h:td>
<combobox id="cbbThang"
width="150px" model="@load(vm.array_Thang)"
selectedItem="@bind(vm.current_Month)">
</combobox>
</h:td>
<h:td>
<label value="Năm" />
</h:td>
<h:td>
<combobox id="cbbNam"
selectedItem="@bind(vm.current_Year)"
model="@load(vm.array_Nam)" width="150px">
</combobox>
</h:td>
<h:td>
<button label="Hiển thị"
onClick="@command('hienThi')" hflex="1" height="20px" />
</h:td>
</h:tr>
</h:table>
</north>
<center flex="true">
<listbox id="gridHeSo" model="@load(vm.groupCT)"
itemRenderer="com.evnit.hrms.spc.grouprenderer.ThietLapCongThucLuong_GroupRenderer"
multiple="true">
<custom-attributes org.zkoss.zul.listbox.groupSelect="true" />
<listhead sizable="true">
<listheader label="Tên" hflex="1" />
<listheader label="Tên hệ số" hflex="1" />
<listheader label="Ký hiệu" hflex="1" />
<listheader label="Công thức" hflex="1" />
</listhead>
</listbox>
</center>
</borderlayout>
</center>
</borderlayout>
</window>
</zk>ThietLapCongThucLuong_VM.javajavapackage com.evnit.hrms.spc.viewmodel.tienluong;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import com.evnit.hrms.spc.custommodel.ThietLapCongThucLuong_Model;
import com.evnit.hrms.spc.groupmodel.ThietLapCongThucLuong_Comparator;
import com.evnit.hrms.spc.groupmodel.ThietLapCongThucLuong_GroupModel;
import com.evnit.hrms.spc.service.TienLuongService;
public class ThietLapCongThucLuong_VM {
@WireVariable
TienLuongService tlService;
List<Integer> array_Thang, array_Nam;
private int current_Month, current_Year;
List<ThietLapCongThucLuong_Model> listCT;
ThietLapCongThucLuong_GroupModel groupCT;
public ThietLapCongThucLuong_GroupModel getGroupCT() {
return groupCT;
}
public void setGroupCT(ThietLapCongThucLuong_GroupModel groupCT) {
this.groupCT = groupCT;
}
public List<ThietLapCongThucLuong_Model> getListCT() {
return listCT;
}
public void setListCT(List<ThietLapCongThucLuong_Model> listCT) {
this.listCT = listCT;
}
public int getCurrent_Year() {
return current_Year;
}
public void setCurrent_Year(int current_Year) {
this.current_Year = current_Year;
}
public int getCurrent_Month() {
return current_Month;
}
public void setCurrent_Month(int current_Month) {
this.current_Month = current_Month;
}
public List<Integer> getArray_Thang() {
return array_Thang;
}
public void setArray_Thang(List<Integer> array_Thang) {
this.array_Thang = array_Thang;
}
public List<Integer> getArray_Nam() {
return array_Nam;
}
public void setArray_Nam(List<Integer> array_Nam) {
this.array_Nam = array_Nam;
}
private void loadComboboxThang()
{
array_Thang = new ArrayList<Integer>();
for(int i = 1; i < 13; i++)
array_Thang.add(i - 1, i);
}
private void loadComboboxNam()
{
array_Nam = new ArrayList<Integer>();
int year = Calendar.getInstance().get(Calendar.YEAR);
array_Nam.add(0, year);
for(int i = 1; i < 5; i++)
array_Nam.add(i, year - i);
}
@Init
public void init(){
loadComboboxThang();
loadComboboxNam();
int month = Calendar.getInstance().get(Calendar.MONTH) + 1;
int year = Calendar.getInstance().get(Calendar.YEAR);
setCurrent_Month(month);
setCurrent_Year(year);
groupCT = new ThietLapCongThucLuong_GroupModel(tlService.getCongThucArray(222, month, year), new ThietLapCongThucLuong_Comparator());
groupCT.setMultiple(true);
}
@NotifyChange("listCT")
@Command
public void hienThi() {
listCT = tlService.getCongThucLuong(222, current_Month, current_Year);
}
}
ThietLapCongThucLuong_GroupRenderer.javajavapackage com.evnit.hrms.spc.grouprenderer;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listgroup;
import org.zkoss.zul.Listgroupfoot;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import com.evnit.hrms.spc.custommodel.ThietLapCongThucLuong_Model;
import com.evnit.hrms.spc.groupmodel.ThietLapCongThucLuong_GroupModel;
public class ThietLapCongThucLuong_GroupRenderer implements ListitemRenderer<Object> {
public void render(Listitem listitem, Object obj, int index) throws Exception {
if (listitem instanceof Listgroup) {
ThietLapCongThucLuong_GroupModel.ThietLapCongThucLuong_GroupInfo groupInfo = (ThietLapCongThucLuong_GroupModel.ThietLapCongThucLuong_GroupInfo) obj;
ThietLapCongThucLuong_Model ct = groupInfo.getFirstChild();
String groupTxt;
switch (groupInfo.getColIndex()) {
case 0:
groupTxt = ct.gettENHINHTHUC();
break;
case 1:
groupTxt = ct.gettEN();
break;
case 2:
groupTxt = ct.getkYHIEU();
break;
case 3:
groupTxt = ct.getcONGTHUC();
break;
default:
groupTxt = ct.gettENHINHTHUC();
}
listitem.appendChild(new Listcell(groupTxt));
listitem.setValue(obj);
} else if (listitem instanceof Listgroupfoot) {
Listcell cell = new Listcell();
cell.setSclass("foodFooter");
cell.setSpan(4);
cell.appendChild(new Label("Có " + obj + " công thức"));
listitem.appendChild(cell);
} else {
ThietLapCongThucLuong_Model data = (ThietLapCongThucLuong_Model) obj;
listitem.appendChild(new Listcell(data.gettENHINHTHUC()));
listitem.appendChild(new Listcell(data.gettEN()));
listitem.appendChild(new Listcell(data.getkYHIEU()));
listitem.appendChild(new Listcell(data.getcONGTHUC()));
listitem.setValue(data);
}
}
}
ThietLapCongThucLuong_GroupModel.javajavapackage com.evnit.hrms.spc.groupmodel;
import java.util.Comparator;
import org.zkoss.zul.GroupsModelArray;
import com.evnit.hrms.spc.custommodel.ThietLapCongThucLuong_Model;
public class ThietLapCongThucLuong_GroupModel extends GroupsModelArray<ThietLapCongThucLuong_Model, ThietLapCongThucLuong_GroupModel.ThietLapCongThucLuong_GroupInfo, Object, Object> {
private static final long serialVersionUID = 1L;
public ThietLapCongThucLuong_GroupModel(ThietLapCongThucLuong_Model[] data, Comparator<ThietLapCongThucLuong_Model> cmpr) {
super(data, cmpr);
}
protected ThietLapCongThucLuong_GroupInfo createGroupHead(ThietLapCongThucLuong_Model[] groupdata, int index, int col) {
return new ThietLapCongThucLuong_GroupInfo(groupdata[0], index, col);
}
protected Object createGroupFoot(ThietLapCongThucLuong_Model[] groupdata, int index, int col) {
// Return the sum number of each group
return groupdata.length;
}
public static class ThietLapCongThucLuong_GroupInfo {
private ThietLapCongThucLuong_Model firstChild;
private int groupIndex;
private int colIndex;
public ThietLapCongThucLuong_GroupInfo(ThietLapCongThucLuong_Model firstChild, int groupIndex, int colIndex) {
super();
this.firstChild = firstChild;
this.groupIndex = groupIndex;
this.colIndex = colIndex;
}
public ThietLapCongThucLuong_Model getFirstChild() {
return firstChild;
}
public int getGroupIndex() {
return groupIndex;
}
public int getColIndex() {
return colIndex;
}
}
}