关于删除Ext分页表格最后一页全部数据后页面无效的问题

关键词

Ext,Ext.toolbar.paging

环境说明

开发环境:Eclipse Indigo

浏览器环境:

问题描述

在使用表格展示大量数据时,由于页面性能受限,通常使用分页功能逐页展示数据。

Ext中,Ext.toolbar.paging组件实现表格数据的分页显示,但是在测试过程中发现,若将最后一页的全部数据一次性删除,表格页面将没有任何数据显示(而此时后台实际是有数据的)。如下图:

初始首页,可以看到总共有3590条数据,共36个分页

删除最后一页后的问题页面,页面跳转按钮灰化,总页数、当前页数、记录条数等信息均显示为0

问题详述

定义用户的store如下,设定每页展示100条数据,使用proxy从后台servlet获取json格式的返回数据,返回的人员信息存放在”personArray”,返回的总记录条数存放在”totalCount”。

Ext.create(‘ExamPlatform.datamodel.PeopleM’); // 必须要先创建一次,否则store无法找到对应的modelvar personInfoStore = Ext.create(‘Ext.data.Store’, {pageSize: 100,autoDestroy: true,model: ‘ExamPlatform.datamodel.PeopleM’,proxy: {type: ‘ajax’,url: ‘/senhwa/queryPersonInfoServlet’,reader: {type: ‘json’,root: ‘personArray’, // 存放当前返回的数据totalProperty : ‘totalCount’ //存放总共的记录数}}

Servlet中根据前台传送的参数 start和limit来返回对应的数据信息。这两个参数由Ext自动封装,start即起始记录的序号,limit即在store中定义的pageSize。

//获取limit和start参数Integer limit = 50;Integer start = 0;try{limit = Integer.valueOf(request.getParameter("limit"));start = Integer.valueOf(request.getParameter("start"));} catch (NumberFormatException e1){e1.printStackTrace();}try{PrintWriter out = response.getWriter();List<PersonBean> personBeanList = PersonDAO.queryPersons();int totalCount = personBeanList.size();//判断末尾记录的序号int end = CommonUtil.floor((start + limit), totalCount);JSONArray array = JSONArray.fromObject(personBeanList.subList(start, end));String jsonArray = array.toString();String retJson = "{\&;totalCount\&;:\&;" + totalCount + "\&;,\&;personArray\&;:" + jsonArray + "}";out.write(retJson);out.close();}catch (PersonDbException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}

这里插一句,通过测试可以发现,Ext.toolbar.paging组件初始传给后台的[start,limit]为[0,100],点击next后传给后台[100,100],以此类推。由于总记录数不一定等于总页数×每页展示记录条数,所以在截取列表数据前,需要先比较start+limit与totalCount的大小,取其小者。

下面两张图分别是初始的第一页和第二页的数据,注意总页数是36页,总记录条数是3590条,当前第101条数据为“韩波”。

回到首页,将首页的100条数据全部选中并删除

删除数据后,personInfoStore再次load数据

PersonInfoDwr.removePersonById(jsonStr, function(){//刷新列表personInfoStore.load();});

由此可以推测,传递给后台的[start,limit]依然是[0,100],即当前页号不变(依然为1),起始记录序号不变(依然为0)。

首先需要说明的是,针对一个列表中的数据进行删除,后面的数据自动补位,这样的处理符合习惯的。

让我们先查看一下最后一页(35)和最后第二页(34)的数据。

想象一下,当把最后一页的数据全部删除后,页面会展示什么数据?

·是否会像删除首页一样展示后续的数据?不可能了,,因为后面已经没有数据了。

·不展示任何数据?可以理解。

·展示前一页的数据?这个是最符合习惯的,删除了最后一页,原来的最后第二页就应该展示到最后一页的地方。

那么我们来删除最后一页数据,看看会是什么效果。

如图所示,删除后没有数据显示,且当前页,总页数均显示为0,总记录数为0。页面跳转按钮灰化不可用。

通俗点说,这个页面不可用了!

为什么会出现这种情况?

首先,我们来查看之前操作传递给后台的数据如下:

[start,limit,total]

进入首页

[0,100,3590]

删除首页全部数据

[0,100,3490]

进入最后一页

[3400,100,3490]

删除最后一页全部数据

[3400,100,3400]

注意最后一行的start和total是相等的,即此时,截取到的列表将是空的。这也就是为什么删除后页面会没有数据展示。

但是为什么页面按钮会灰化呢?

自己选择的路,跪着也要把它走完。

关于删除Ext分页表格最后一页全部数据后页面无效的问题

相关文章:

你感兴趣的文章:

标签云: