首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

zk两种分页模式之比较

2012-10-24 
zk两种分页方式之比较ZK提供两种分页方式,一种是自带的“moldpaging”的形式;另一种是采用“paging”组件

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>

后台控制类 MyComposer.java:
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);}});}}

第二种:采用“<paging>”组件进行分页:

paging.zul:
<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>


后台控制类Paging_ctrl.java:
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;}}


分析:
第一种方式是把数据全部加载到内存再进行分页,达到几十W跳数据后将降低性能;
而第二种方式则采用hibernate的分页查询方式,性能将大大加强。因此推荐第二种方式。



热点排行