package com.test; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import org.zkoss.zk.ui.Component; import org.zkoss.zul.Grid; import org.zkoss.zul.Group; import org.zkoss.zul.GroupsModel; import org.zkoss.zul.GroupsModelArray; import org.zkoss.zul.Label; import org.zkoss.zul.Row; import org.zkoss.zul.RowRenderer; import cz.datalite.stereotype.Controller; import cz.datalite.zk.annotation.ZkComponent; import cz.datalite.zk.annotation.ZkEvent; import cz.datalite.zk.composer.DLComposer; @Controller public class TestController extends DLComposer { @ZkComponent public Grid testGrid; @ZkEvent(id = "updateButton") public void updateData() { testGrid.setModel(createGroupModel()); } @Override public void doAfterCompose(Component comp) throws Exception { super.doAfterCompose(comp); testGrid.setRowRenderer(new RowRenderer() { @Override public void render(Row row, Object obj) throws Exception { TestBean bean = (TestBean) obj; if (row instanceof Group) { row.appendChild(new Label(bean.getProp1())); } else { row.appendChild(new Label(bean.getProp2())); } } }); testGrid.setModel(createGroupModel()); } private GroupsModel createGroupModel() { List dataList = new ArrayList(); for (int i = 0; i < 100; i++) { dataList.add(new TestBean(String.valueOf(i % 5), String.valueOf(i), String.valueOf(i))); } return new GroupsModelArray(dataList, new TestBeanComparator()); } class TestBean { public TestBean(String prop1, String prop2, String prop3) { this.prop1 = prop1; this.prop2 = prop2; } private String prop1, prop2; public String getProp1() { return prop1; } public String getProp2() { return prop2; } public void setProp1(String prop1) { this.prop1 = prop1; } public void setProp2(String prop2) { this.prop2 = prop2; } @Override public String toString() { return "TestBean [prop1=" + prop1 + ", prop2=" + prop2 + "]"; } } class TestBeanComparator implements Comparator { @Override public int compare(TestBean o1, TestBean o2) { return o1.getProp1().compareTo(o2.getProp1()); } }; }