Ext中的分页实现小解

      最近开发用EXT+SSH,开发的不亦乐乎,突然遇到一个问题------分页,经过一天的尝试最后解决问题,网上有很多的文章写这个的,但是我感觉写的人肯定知道了怎么去做,但是看的人是一面的雾水.希望我写的对大家有所帮助.

      我实现的是对Grid的分页,使用到的有GridPanel ,Pagingbar,JSonStore.使用的的是struts2.0+hibernate.

      首先、说一下JSonStore;

                cityStore=new Ext.data.Store({//配置分组数据集
                  autoLoad :{params:{start:0,limit:2}},
                  reader: new Ext.data.JsonReader({
                     totalProperty:'results',
                      root : "cities",
                       fields : [
                              {name: 'cityId'},
                              {name: 'cityName'},
                              {name:'longitude'},
                               {name:'latitude'},
                                 {name:'cityDescription'}]
                           }),

          其中重要的有三个变量:start limit totalProperty,在autoLoad:中的start ,limit 是用来设置开始加载store时候使用,相当于第一次显示的记录,limit 要与pagingBar 中的pasgeSize 数值一样、再一个是totalProerty是记录的总数,是所有记录的数量,不是json返回的记录数量,这就决定了,我们在生成json数据的时候,返回的results,是所有的记录的数量,而不是一页包含的记录数,因为pagingbar的分页数量是根据jsonStrore中totalProperty和pagingbar中的pageSize计算主来的。

     其次、说一下pagingbar

          var pagingBar=new Ext.PagingToolbar(
           {
           //params:{start:0,limit:2},
           store:cityStore,
           pageSize:2,
           displayInfo:false,
           displayMsg:'第{0}条到{1}条,一共{2}条',
           emptyMsg:'没有记录'
           });

        里面重要的数据有pageSize,params{start ,limit},store,pageSize是一页显示的记录数,params{start,limit}是pagingbar默认的参数,可以自己定义,这两个参数是用在action中的接收参数,action根据stat limit来获得要返回的json中的记录内容,并把内容传递给jsonStore,store就不说了,就是自己定义的那个cityStore.

       再次、说一说action,action是关键的,它要接受start limit两个参数,根据这两个参数从数据库中获得记录集合,同时要获得所有记录的总数,并且把记录的总数要作为数据传递给store,results在这个里子中是这样的。长久没有解决这个问题,原因就是没有想到这一点,最后才发现,很多文章,在这一点,没有介绍清楚,我想是大家都知道,都没有点明,这让我饶了一个大弯,通过不段的测试和假设才发现原因,不过还要感谢你们帮助我找到问题的原因。

       最后、简单说一下hibernate,在数据库操作类,定义一个根据开始位置和增加量的方法。

public List getCitys(final int begin, final int end) {
  // TODO Auto-generated method stub
  final String hql="from City";
  final int cityCount=this.getCityCount();//获得所有的记录数量
  List list=(List)this.getHibernateTemplate().execute(new HibernateCallback()
  {

   public Object doInHibernate(Session session) throws HibernateException, SQLException {
    // TODO Auto-generated method stub
    Query query=session.createQuery(hql);
    int first,last;
    List listTemp;
    if(begin<cityCount)
    {
    if(begin>0)
    {
     first=begin;
    }
    else
    {
     first=0;
    }
    if(end<cityCount-begin)
    {
     last=end;
    }
    else
    {
     last=cityCount-begin;
    }
    query.setFirstResult(first);
    query.setMaxResults(last);
       listTemp=query.list();
    }
    else
    {
     listTemp=null;
    }
    return listTemp;
   }
   
  });
  return list;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值