zk两种分页方式之比较
ZK提供两种分页方式,一种是自带的“mold="paging"”的形式;另一种是采用“<paging>”组件添加分页功能。具体实现如下:
第一种:采用自带的“mold="paging"”:
infoList.zul:
<zk><window id="mainwin" border="normal" width="600px"apply="${myComposer}"><listbox id="li" mold="paging" pageSize="5"><listhead><listheader label="Id" sort="auto(Id)"/><listheader label="Name" sort="auto(Name)"/><listheader label="Address" sort="auto(Address)"/><listheader /></listhead><listitem self="@{each=in }"><listcell id="colId" label="@{in.id }"></listcell><listcell id="colName" label="@{in.name }"></listcell><listcell id="colAddr" label="@{in.address }"></listcell><listcell></listcell></listitem></listbox></window></zk>
public class MyComposer extends GenericForwardComposer {protected Textbox name;protected Textbox address;private Listbox li;private Window mainwin;private AnnotateDataBinder binder;private Service service;private List<Info> infoList;private int totalsize;public void setInfoList(List<Info> infoList) {this.infoList = infoList;}public void setService(Service service) {this.service = service;}public void onCreate$mainwin(Event event) throws Exception {binder = new AnnotateDataBinder(mainwin);binder.loadAll();}public void doAfterCompose(Component component) throws Exception {super.doAfterCompose(component);infoList = service.findAllInfos();totalsize = infoList.size();li.setModel(new ListModelList(infoList));li.setItemRenderer(new ListitemRenderer() {@Overridepublic void render(Listitem item, Object data) throws Exception {// TODO Auto-generated method stubInfo itinfo = (Info) data;Listcell colId = new Listcell();Listcell colName = new Listcell();Listcell colAddr = new Listcell();colId.setLabel(itinfo.getId().toString());colId.setParent(item);colName.setLabel(itinfo.getName());colName.setParent(item);colAddr.setLabel(itinfo.getAddress());colAddr.setParent(item);}});}}
<zk><window id="pagingWin" title="paging" border="normal"apply="${paging_ctrl}"><grid><rows><row>人员列表:</row><row><listbox id="li" width="100%"><listhead><listheader label="ID" sort="auto(Id)" /><listheader label="姓名" /><listheader label="地址" /></listhead></listbox><separator /></row></rows></grid><paging id="pge" pageSize="10"></paging></window></zk>
public class Paging_ctrl extends GenericForwardComposer {private AnnotateDataBinder binder;private Window pagingWin;private Listbox li;private Paging pge;private List<Info> infoList;int maxCount = 0;private Service service;public void onCreate$pagingWin(Event event) throws Exception {binder = new AnnotateDataBinder(pagingWin);binder.loadAll();}public void doAfterCompose(Component component) throws Exception {super.doAfterCompose(component);maxCount = service.findAllInfos().size();pge.setTotalSize(maxCount);final int PAGE_SIZE = pge.getPageSize();redraw(0, PAGE_SIZE);pge.addEventListener("onPaging", new EventListener() {public void onEvent(Event event) {PagingEvent pe = (PagingEvent) event;int pgno = pe.getActivePage();// 页数(从零计算)int start = pgno * PAGE_SIZE;redraw(start, PAGE_SIZE);}});} @SuppressWarnings("unchecked") private void redraw(int offSet, int pageSize) { li.getItems().clear(); List<Info> list = service.findInfoByPage(offSet, pageSize); for (Info info : list) { Listitem item = new Listitem(); item.setValue(info); item.appendChild(new Listcell("" + info.getId())); item.appendChild(new Listcell(info.getName())); item.appendChild(new Listcell(info.getAddress())); li.appendChild(item); } } public void setService(Service service) {this.service = service;}}