ZK listbox 两种分页使用及比较

参考:http://tsinglongwu.iteye.com/blog/849923

以下代码模拟数据量大时情况,采用“<paging>”组件方式

前台Listbox.zul :

<?page title="Listbox使用" contentType="text/html;charset=UTF-8"?>
<zk xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.zkoss.org/2005/zul"
        xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul">
<window id="listboxWin" border="normal" apply="test.ListboxCtrl">
    <listbox id="listbox">
        <listhead sizable="true" >
            <listheader id="nameListHeader" label="姓名" align="center"/>
        </listhead>
    </listbox>
    <paging id="pagetest" pageSize="10" totalSize="50000" detailed="true"/>
</window>
</zk>

ListboxCtrl.java :

package test;

import java.util.ArrayList;
import java.util.List;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Paging;
import org.zkoss.zul.event.PagingEvent;

public class ListboxCtrl extends GenericForwardComposer<Component>{

    private static final long serialVersionUID = 1L;

    private Listbox listbox;
    private ListModelList<String> model;
    private List<String> testList = new ArrayList<String>();
    private Paging pagetest;
    private int count = 1;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        // TODO Auto-generated method stub
        super.doAfterCompose(comp);

        //填充第一页数据
        for (int i = 1; i < pagetest.getPageSize()+1; i++) {
            testList.add(i+"");
        }

        model = new ListModelList<String>(testList);
        listbox.setModel(model);
        listbox.setItemRenderer(new testItemRenderer());

        //监听分页改变事件
        pagetest.addEventListener("onPaging", new EventListener<Event>() {

            @Override
            public void onEvent(Event event) throws Exception {
                // TODO Auto-generated method stub
                PagingEvent pe = (PagingEvent) event;

                redraw(pe.getActivePage()+1,pagetest.getPageSize());
            }
        });
    }

    public class testItemRenderer implements ListitemRenderer<String>{

        @Override
        public void render(Listitem item, String data, final int index)
                throws Exception {
            // TODO Auto-generated method stub

            item.setValue(data);
            Listcell listcell2 = new Listcell();
            Label label = new Label(data);
            listcell2.appendChild(label);
            listcell2.setParent(item);
        }
    }

    private void redraw(int activePage,int pageSize) {  

        //清空所有数据
        listbox.getItems().clear();
        testList.clear();

        int total = activePage * pageSize;

        for (int i = total-pageSize+1; i <= total; i++) {

            //当超过总页数时
            if (i > pagetest.getTotalSize()) {
                break;
            }

            testList.add(i+"");
        }

        model = new ListModelList<String>(testList);
        listbox.setModel(model);
    }
}

效果:

时间: 2024-08-10 21:29:42

ZK listbox 两种分页使用及比较的相关文章

关于php,mysql,html的数字分页和文本分页的两种分页样式供大家参考

请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 首先进行样式展示希望对大家有所帮助,也希望大家给出意见和建议: 第一种:数字分页 第二种:为文本分页 php分页函数(我写在下面引入的common.inc.php公共文件中): /* *_page()分页的相关参数 *@param int $_pagesize 每页存有几个好友 *@param $_sql 获取所有字段 *

Hibeernate中的两种分页方式

1. return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException { Criteria c = s.createCriteria(AskOnline.class); c.add(Restrictions.eq("boardid", new Long(bid))); c.setFirs

lucene的两种分页操作

基于lucene的分页有两种: lucene3.5之前分页提供的方式为再查询方式(每次查询全部记录,然后取其中部分记录,这种方式用的最多),lucene官方的解释:由于我们的速度足够快.处理海量数据时,内存容易内存溢出.    lucene3.5以后提供一个searchAfter,这个是在特大数据量采用(亿级数据量),速度相对慢一点,像google搜索图片的时候,点击更多,然后再出来一批.这种方式就是把数据保存在缓存里面.然后再去取. 以下是再查询部分代码: /** * 这就是先查询所有的数据,

bootstrap table两种分页需要的数据不同

先上原帖地址:http://blog.csdn.net/tyrant_800/article/details/50269723 问题描述: 调用$("#show_list_table").bootstrapTable("refresh");刷新table以后,搜索条件可以传入,也请求到了数据,但是就是不在table中展示数据. 最后发现是因为服务器端分页和客户端分页需要的json格式不一样. 原帖内容: 服务器分页/客户端分页的转换,table刷新 bootstra

springboot 注册服务注册中心(zk)的两种方式

在使用springboot进行开发的过程中,我们经常需要处理这样的场景:在服务启动的时候,需要向服务注册中心(例如zk)注册服务状态,以便当服务状态改变的时候,可以故障摘除和负载均衡. 我遇到过两种注册的途径: 1.在Spring的webapplication启动完成后,直接进行注册: 2.在servlet容器启动完成后,通过listener进行注册. 本文通过一个demo讲述一下这两种注册方式,使用的是传统的向zk注册的方案. 1.Spring webapplication启动完成后注册 先上

Mybatis-plus的两种分页插件的配置方式

第一种: package com.paic.ocss.gateway.admin.config; import com.baomidou.mybatisplus.plugins.PaginationInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.an

sqlserver两种分页方法比较

-- 3000 page(从1开始) 10 pagesize -- 方法1(效率不高): SELECT TOP 10 * FROM [xxx].[oooo] WHERE id NOT IN (SELECT TOP (10*(3000-1)) id FROM [xxx].[oooo] ORDER BY createtime DESC)ORDER BY createtime DESC; 方法2(效率高): SELECT TOP 10 * FROM (SELECT ROW_NUMBER() OVER

mybatis的两种分页方式:RowBounds和PageHelper

原理:拦截器. 使用方法: RowBounds:在mapper.java中的方法中传入RowBounds对象. RowBounds rowBounds = new RowBounds(offset, page.getPageSize()); // offset起始行 // limit是当前页显示多少条数据 public List<ProdProduct> findRecords(HashMap<String,Object> map,RowBounds rowBounds); map

sql 两种分页offset和row_number简单分析

新建临时表字段id,向临时表里插入1,2,3,4,5,6 if object_id('tempdb..#test') is not null drop table #test create table #test(id int)insert into #test(id)values(1),(2),(3),(4),(5),(6) declare @page int---当前页面declare @rows int---页面大小set @page=2set @rows=3 ---------当前页面为