`
tsinglongwu
  • 浏览: 232349 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

zk两种分页方式之比较

    博客分类:
  • 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() {
			@Override
			public void render(Listitem item, Object data) throws Exception {
				// TODO Auto-generated method stub
				Info 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的分页查询方式,性能将大大加强。因此推荐第二种方式。



0
0
分享到:
评论

相关推荐

    ZK MVC与MVVM模式联合实现动态分页

    本话题主要探讨如何在ZK框架下,结合MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)两种设计模式来实现动态分页功能。 首先,我们来了解一下ZK框架。ZK是一款基于Java的开源富客户端用户界面框架,它...

    搜狐&&美团旅行面试题.docx

    - Elasticsearch的`from/size`分页通过跳过前`from`条记录,然后返回`size`条记录的方式实现分页查询。这种方式可能导致性能下降,特别是在分页很深的情况下。 9. **手写一个LRU缓存** - LRU缓存可以通过哈希表...

    1000道 互联网Java工程师面试题 485页_PDF密码解除.pdf

    - **ZAB协议:**ZooKeeper的基本协议,分为两种模式:恢复模式和广播模式。 - **恢复模式:**用于在新领导人选举后重新同步状态。 - **广播模式:**用于正常状态下的数据更新。 **4. 四种类型的数据节点Znode** - ...

    1000道 互联网Java工程师面试题 485页

    - **协议类型**:分为两种模式,一种是在正常模式下的ZAB协议,另一种是在恢复模式下的选主协议。 - **功能**:保证所有服务器的数据一致性和事务顺序一致性。 #### 4、四种类型的数据节点Znode - **PERSISTENT**...

    android下拉上推刷新

    2. 实现方式:有两种常见实现方式: - 监听滚动事件:监听`RecyclerView`或`ListView`的滚动事件,当用户滚动到列表底部时,加载新数据。 - `LinearLayoutManager`的`setLoadMoreListener`:对于`RecyclerView`,...

    MySQL MyCAT安装应用经典案例实战

    MyCAT提供了一种基于两阶段提交的方式,能够在一定程度上解决这个问题。 - **跨节点Join的问题**:由于数据分布在不同的数据库节点上,传统的JOIN操作不再可行。MyCAT提供了模拟JOIN的功能,通过将查询结果在中间件...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包101

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    Java资源包01

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    linux教程——很使用的那种

    X Window是一种协议。 unix图形环境是CDE:common desktop environment通用桌面环境。 linux系统结构:硬件、内核层、shell层、应用层、用户。 在安装linux的时候,会弹出 CD Found To begin testing the CD ...

Global site tag (gtag.js) - Google Analytics