`
My*Love
  • 浏览: 72471 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Ext中对于多种store数据分页实现示例

阅读更多
  大家都知道,对于很多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.zip (2.7 MB)
  • 下载次数: 123
2
0
分享到:
评论
3 楼 793059909 2013-11-26  
不错。

报了个错及解决办法:

java.lang.SecurityException: class "org.apache.commons.collections.iterators.AbstractEmptyIterator"'s signer information does not match signer information of other classes in the same package

解决办法:
工程里的commons-collections.jar包与其它包不匹配导致的,例如如果你用commons-beanutils-1.7.0.jar,commons-collections-3.2.jar时会出现你的那种问题,如果是commons-beanutils-1.7.0.jar,commons-collections-3.1.jar就不会就这种问题了

http://bbs.csdn.net/topics/200085409

2 楼 My*Love 2011-04-13  
maoxiaozhu3210 写道
你好我下载了相关的文件后却没有UserinfoUtil.js,可以贴出来吗

不知你用过dwr没有,这是一个将UserinfoUtil.java文件转换成js文件的框架,具体可以仔细看下我文章里面的吧
1 楼 maoxiaozhu3210 2011-04-11  
你好我下载了相关的文件后却没有UserinfoUtil.js,可以贴出来吗

相关推荐

    Ext实现分页查询,前台

    本示例主要介绍了如何使用Ext.js这个JavaScript框架来实现前端的分页查询功能。 首先,创建一个名为`resource`的数据存储(Store),它负责从服务器获取数据。这里的`Store`对象定义了字段(fields)、数据源URL...

    ext分页客户端demo Java js

    在这个"ext分页客户端demo Java js"的示例中,我们将探讨EXTJS如何实现客户端分页,以及如何与后端(如Java)进行数据交互,而无需在服务器端编写额外的Java代码。 EXTJS中的分页组件主要由Ext.grid.Panel和Ext....

    Asp.Net Ext.Net 存储过程分页 只读取当前页数据

    在下载的`ExtPage动态分页`示例中,你可以看到具体的代码实现,包括HTML、CSS和C#后端代码,这些都可以作为学习和参考的模板。只需将数据库连接信息替换为你自己的,即可在本地运行并测试这个功能。

    EXT JSON Sqlserver 分页 全部正常运行

    在这个示例中,SQL Server用于存储数据并响应来自EXT JS应用的分页请求,可能涉及到SQL的SELECT语句,带有OFFSET和FETCH子句来实现分页查询。 4. JSP与JavaBean:JSP(JavaServer Pages)是一种动态网页技术,允许...

    Ext-Js分页示例代码详解.pdf

    在EXT JS中,分页是一种常见且重要的功能,特别是在数据量较大时,为了提高用户体验,分页能够...虽然EXT JS在大数据量时的性能表现可能不尽人意,但对于小型项目或局部功能,EXT JS提供的分页解决方案仍然非常实用。

    简单的小例子Ext+servlet 分页

    本示例探讨了如何结合Ext JS(一个强大的JavaScript框架)和Servlet(Java Web开发中的服务器端组件)来实现简单的分页功能。下面将详细解释这个主题。 首先,Ext JS是一个用于构建用户界面的前端JavaScript库,它...

    Ext2.2.GridPanel分页处理+dwrproxy(js对象和json两种数据)

    本话题将深入探讨如何在Ext2.2中使用GridPanel进行分页处理,并结合DWR(Direct Web Remoting)代理来实现数据的异步加载。我们将关注两个数据格式:JavaScript对象(JS对象)和JSON。 首先,Ext2.2的GridPanel是...

    ExtJS笔记---Grid实现后台分页

    这篇“ExtJS笔记——Grid实现后台分页”探讨了如何在ExtJS的Grid组件中实现高效的后台分页功能。 后台分页是一种常见的数据处理策略,特别是在大数据量的情况下,它将数据分批加载,避免一次性加载所有记录导致的...

    EXT2.0分页

    title: 'EXT2.0分页示例', items: [view, pagingToolbar] }); panel.render(document.body); // 渲染到页面 ``` 4. 在后端,你需要提供一个能支持分页查询的接口,通常通过HTTP请求的参数来传递页码和每页...

    EXT.NET1.0带自定义页大小的分页

    在这个“EXT.NET1.0带自定义页大小的分页”示例中,我们将深入探讨EXT.NET如何实现自定义分页功能,并通过Pagination.aspx、Pagination.aspx.cs和存储过程.sql这三份文件来理解整个实现过程。 在Web开发中,分页是...

    ext分页查询ext分页查询ext分页查询ext分页查询ext分页查询

    数据存储通常与数据源(如RESTful API)连接,并且可以实现分页、排序和过滤功能。 2. **分页插件(Paging Toolbar)**:当与数据存储结合使用时,分页工具栏(`Ext.PagingToolbar`)可以在底部显示页码导航,允许...

    Ext-实现带查询以及分页的列表

    在EXTJS框架中,实现一个带查询和分页功能的列表是常见的需求,主要涉及到数据存储(Store)、数据读取(Reader)、网格面板(GridPanel)和分页工具栏(PagingToolbar)。下面将详细解释如何使用EXTJS来实现这一...

    EXT2.0 GRID 示例

    在EXT2.0 GRID 示例中,你可能会遇到以下关键知识点: 1. **数据绑定**:EXT GRID可以与各种数据源绑定,例如JSON或XML,通过Store组件实现。Store负责加载、缓存和管理数据,与GRID进行通信,更新视图。 2. **列...

    ext4.0动态加载示例

    在“ext4.0动态加载示例”中,我们主要关注的是如何利用Ext JS 4.0的特性实现数据的动态加载。动态加载是一种优化应用性能和用户体验的技术,允许应用程序根据需要只加载必要的数据,而不是一次性加载所有数据,这样...

    JSP中使用EXT实现grid table

    2. 分页:EXT Grid可以通过配置Paging Toolbar来实现数据分页,这样用户可以在大量数据中轻松浏览。 3. 排序:Grid中的每一列都可以设置为可排序,用户只需点击列头,即可根据该列数据进行升序或降序排序。 4. ...

    Ext Grid +dwr 列表展示展示带分页

    在Ext Grid中,我们可以设置分页工具栏,通过DWR向服务器请求特定范围的数据,实现动态加载和切换页面。 实现步骤如下: 1. **配置DWR**: 首先,我们需要在服务器端配置DWR,创建一个Java接口,该接口包含返回JSON...

    extjs前台分页插件PagingStore!

    ExtJS的PagingStore是其框架中用于实现前端分页功能的重要组件,主要适用于处理大量数据的场景,以提高网页性能并提供良好的用户体验。在ExtJS 3.x版本中,PagingStore是与GridPanel结合使用,使得用户可以逐页加载...

    ext2.0 grid 分页实例(php)

    在本文中,我们将深入探讨如何使用Ext JS 2.0框架中的Grid组件实现分页功能,结合PHP后端进行数据处理。Grid组件是Ext JS中一个强大的数据展示工具,能够以表格形式展示大量数据,而分页则是处理大数据集时不可或缺...

Global site tag (gtag.js) - Google Analytics