大家都知道,对于很多Web项目都要实现数据分页功能,在Ext项目中分页也是应用比较广泛的,对于分页的实现,如果处理的好,还是没什么大问题,但对于Ext新手来说,实现还是有点难度的,因为自己曾在分页上遇到过不少麻烦,今天就写一个比较完整的Ext分页示例,一方面算是对自己的总结,另一方面希望能给别人一点启发。
1.首先要新建一个Web项目,把ext库文件放到项目下
2.在WebRoot下面新建一个ext_paging.html页面,由于页面内容太长,在这里只把重要代码分析下,后面会把源码附上
<!-- ext式样库 -->
<link type="text/css" rel="stylesheet"
href="ext/resources/css/ext-all.css">
<!-- ext基础类库 -->
<script type="text/javascript" src="ext/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ext/ext-all-debug.js"></script>
使用Ext至少把这3个基本文件引进来
//创建Grid表格组件
purchase_grid = new Ext.grid.GridPanel({
title:"用户信息",
renderTo : 'grid-div',
frame : true,
bbar : pagebar,
loadMask: true,//是否显示正在加载
store : store,
height : 380,
width : 1000,
stripeRows : true,
autoScroll : true,
viewConfig : {autoFill : true},
sm : cb,
cm: colM, //列模型
});
这是一个表格对象,store就是存储数据的东西,实现如下:
//Store数据存储器
store = new Ext.data.Store({
//采用DWR代理
proxy : new Ext.data.DWRProxy(UserinfoUtil.getAllUsers,true),
reader : new Ext.data.ListRangeReader({
totalProperty: 'totalSize',
root : 'data',
id: 'id'
},recordType),
remoteSort: true
});
store.load({
params:{
start:0,
limit:2
}
});
store里面关键的东东就是这个proxy(代理),Ext中代理有好几种,这里采用dwr代理,即我请求这个页面,就会到UserinfoUtil对象里面去取数据了,下面的store.load做分页用,其实分页用户看到的就是表格对象中的bbar(分页栏)起作用了,pagbar实现如下
//分页工具栏
pagebar = new Ext.PagingToolbar({
store : store,
pageSize : 2 ,//每页显示的条数
displayInfo : true,
displayMsg : '第 {0} ~ {1} 条 共 {2} 条',
emptyMsg : '当前没有记录'
});
页面代码写好后,效果如图:
3.把数据库连接类、pojo类、dao类都写好
4.数据的分页处理类UserinfoUtil,代码如下:
/**
* 用户数据处理
*
*/
public class UserinfoUtil {
private UserinfoDao ud = new UserinfoDao();
/**
* 从数据库中查询所有用户对象
*
* @param conditions:页面传过来的分页值
* @return
*/
public ListRange getAllUsers(Map conditions) {
int start = 0, pageSize = 0;
try {
start = Integer.parseInt(conditions.get("start").toString());
pageSize = Integer.parseInt(conditions.get("limit").toString());
System.out.println("start: " + start + " pageSize: " + pageSize);
} catch (Exception ec) {
ec.printStackTrace();
}
// 调用Dao类中的方法,查询所有的产品
List<Userinfo> list = ud.getAllUsers();
System.out.println("共有用户:" + list.size());
// 得到总数据条数
int totalNum = list.size();
// 得到最后一页要显示的数据条数
int endNum = totalNum % pageSize;
// 能够整数页显示的页数
int t = totalNum / pageSize;
// 如果总条数小于每页要显示的条数
if (totalNum <= pageSize) {
pageSize = totalNum;
}
// 如果总条数不能被每页条数整除,最后一页的显示条数是endNum
if (endNum != 0 && start + pageSize > t * pageSize) {
pageSize = endNum;
}
List<Userinfo> n_list = list.subList(start, start + pageSize);
// ListRange实现将数据显示到页面
ListRange listrange = new ListRange(n_list.toArray(), list.size());
return listrange;
}
}
因为页面中的store代理用的是dwr代理,通过dwr将UserinfoUtil类转换成了js对象,所以在页面中还要引入dwr的相关文件
<!-- dwr核心类库 -->
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>
<!--引入 dwr proxy-->
<script type="text/javascript" src="js/dwrproxy.js"></script>
<!-- 用户信息 -->
<script type='text/javascript' src='dwr/interface/UserinfoUtil.js'></script>
那么到此,只要在地址栏请求页面ext_paging.html,表格里面的数据就实现了分页,不过不要高兴的太早,大家看上面还有一个查询功能,我要把查询到的数据也显示到表格中,而查询的过程是一个同步的过程,不能采用dwr来实现了,下面采用store的一般代理来实现
5.查询模块的处理,下面是点击按钮后的函数处理
//查询按钮事件
function submitMsg(){
searchForm.form.submit({
clientValidation:true,//进行客户端验证
waitMsg:'正在进行查询,请稍候...',//提示信息
waitTitle:'提示',
url:'SelectServlet',
method:'POST',
success:function(form,action){//加载成功处理函数
//给store去解析
store=new Ext.data.Store({
url:"PagingServlet",
reader:new Ext.data.JsonReader({
totalProperty:"totalSize",
root:"data",
id:"id"},recordType),
remoteSort: true
});
store.load({
params:{
start:0,
limit:2
}
});
//刷新分页工具栏pagebar
[color=red]pagebar.bind(store);[/color] //将store里面的数据提交
store.commitChanges();
//表格重新加载
purchase_grid.reconfigure(store,colM);
},
failure:function(form,action){//加载失败处理函数
Ext.Msg.alert('提示','查询失败');
}
});
}
注意那行红色代码:pagebar.bind(store);,是将新的store绑定给分页工具栏,这样翻动下一页才显示的是当前store的数据,其实对于不同store数据的分页显示就是这行代码起的作用
6.查询功能后台的实现,为了简单我都采用的是servlet实现
public class SelectServlet extends HttpServlet {
private static List<Userinfo> ulist;
/**
* 根据选择查询用户信息的servlet
*/
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("根据选择查询用户信息的servlet");
response.setContentType("text/json;charset=GBK");
PrintWriter out = response.getWriter();
// 得到选择的职业ID
int ptype_id = Integer.parseInt(request.getParameter("id"));
System.out.println("用户选择的是:" + ptype_id);
// 根据ID来查询所属用户
UserinfoDao ud = new UserinfoDao();
ulist = ud.getByPtypeId(ptype_id);
if (ulist == null) {
response.getWriter().write("{success:false}");
} else {
response.getWriter().write("{success:true}");
}
out.flush();
out.close();
}
public static List<Userinfo> getUserinfos() {
return ulist;
}
即根据用户选择进行查询
/**
* 将查询到的用户数据分页
*/
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("用户数据分页的servlet");
response.setContentType("text/json;charset=GBK");
PrintWriter out = response.getWriter();
// 得到要分页的数据
List<Userinfo> ulist = SelectServlet.getUserinfos();
int start = Integer.parseInt(request.getParameter("start"));
int limit = Integer.parseInt(request.getParameter("limit"));
System.out.println("start:" + start + " limit:" + limit + " list size:"
+ ulist.size());
// 将start和limit放到一个Map中
Map map = new HashMap();
map.put("start", start);
map.put("limit", limit);
// 对数据进行分页处理
ListRange range = UserinfoUtil.getUsersById(map, ulist);
// 把ListRange转换成json格式的数据
String json = DataFormatTransform.getJsonFromBean(range);
response.getWriter().write(json);
out.flush();
out.close();
}
再将数据分页
查询分页的实现是把数据都转换成了json格式的了,通过页面的Ext中的JsonReader对象去读取
这样两种类型的分页基本就实现了,文章里面省去了很多代码,如果大家看不懂也不要紧,为了真正的帮助到大家,源码及数据库都在下面,可以慢慢领会
- 大小: 50.5 KB
分享到:
相关推荐
本示例主要介绍了如何使用Ext.js这个JavaScript框架来实现前端的分页查询功能。 首先,创建一个名为`resource`的数据存储(Store),它负责从服务器获取数据。这里的`Store`对象定义了字段(fields)、数据源URL...
在这个"ext分页客户端demo Java js"的示例中,我们将探讨EXTJS如何实现客户端分页,以及如何与后端(如Java)进行数据交互,而无需在服务器端编写额外的Java代码。 EXTJS中的分页组件主要由Ext.grid.Panel和Ext....
在下载的`ExtPage动态分页`示例中,你可以看到具体的代码实现,包括HTML、CSS和C#后端代码,这些都可以作为学习和参考的模板。只需将数据库连接信息替换为你自己的,即可在本地运行并测试这个功能。
在这个示例中,SQL Server用于存储数据并响应来自EXT JS应用的分页请求,可能涉及到SQL的SELECT语句,带有OFFSET和FETCH子句来实现分页查询。 4. JSP与JavaBean:JSP(JavaServer Pages)是一种动态网页技术,允许...
在EXT JS中,分页是一种常见且重要的功能,特别是在数据量较大时,为了提高用户体验,分页能够...虽然EXT JS在大数据量时的性能表现可能不尽人意,但对于小型项目或局部功能,EXT JS提供的分页解决方案仍然非常实用。
本示例探讨了如何结合Ext JS(一个强大的JavaScript框架)和Servlet(Java Web开发中的服务器端组件)来实现简单的分页功能。下面将详细解释这个主题。 首先,Ext JS是一个用于构建用户界面的前端JavaScript库,它...
本话题将深入探讨如何在Ext2.2中使用GridPanel进行分页处理,并结合DWR(Direct Web Remoting)代理来实现数据的异步加载。我们将关注两个数据格式:JavaScript对象(JS对象)和JSON。 首先,Ext2.2的GridPanel是...
这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...
title: 'EXT2.0分页示例', items: [view, pagingToolbar] }); panel.render(document.body); // 渲染到页面 ``` 4. 在后端,你需要提供一个能支持分页查询的接口,通常通过HTTP请求的参数来传递页码和每页...
在这个“EXT.NET1.0带自定义页大小的分页”示例中,我们将深入探讨EXT.NET如何实现自定义分页功能,并通过Pagination.aspx、Pagination.aspx.cs和存储过程.sql这三份文件来理解整个实现过程。 在Web开发中,分页是...
数据存储通常与数据源(如RESTful API)连接,并且可以实现分页、排序和过滤功能。 2. **分页插件(Paging Toolbar)**:当与数据存储结合使用时,分页工具栏(`Ext.PagingToolbar`)可以在底部显示页码导航,允许...
在EXTJS框架中,实现一个带查询和分页功能的列表是常见的需求,主要涉及到数据存储(Store)、数据读取(Reader)、网格面板(GridPanel)和分页工具栏(PagingToolbar)。下面将详细解释如何使用EXTJS来实现这一...
在EXT2.0 GRID 示例中,你可能会遇到以下关键知识点: 1. **数据绑定**:EXT GRID可以与各种数据源绑定,例如JSON或XML,通过Store组件实现。Store负责加载、缓存和管理数据,与GRID进行通信,更新视图。 2. **列...
在“ext4.0动态加载示例”中,我们主要关注的是如何利用Ext JS 4.0的特性实现数据的动态加载。动态加载是一种优化应用性能和用户体验的技术,允许应用程序根据需要只加载必要的数据,而不是一次性加载所有数据,这样...
2. 分页:EXT Grid可以通过配置Paging Toolbar来实现数据分页,这样用户可以在大量数据中轻松浏览。 3. 排序:Grid中的每一列都可以设置为可排序,用户只需点击列头,即可根据该列数据进行升序或降序排序。 4. ...
在Ext Grid中,我们可以设置分页工具栏,通过DWR向服务器请求特定范围的数据,实现动态加载和切换页面。 实现步骤如下: 1. **配置DWR**: 首先,我们需要在服务器端配置DWR,创建一个Java接口,该接口包含返回JSON...
ExtJS的PagingStore是其框架中用于实现前端分页功能的重要组件,主要适用于处理大量数据的场景,以提高网页性能并提供良好的用户体验。在ExtJS 3.x版本中,PagingStore是与GridPanel结合使用,使得用户可以逐页加载...
在本文中,我们将深入探讨如何使用Ext JS 2.0框架中的Grid组件实现分页功能,结合PHP后端进行数据处理。Grid组件是Ext JS中一个强大的数据展示工具,能够以表格形式展示大量数据,而分页则是处理大数据集时不可或缺...