`

Extjs 分页技术详细介绍和baseParams属性介绍

阅读更多

Extjs 分页技术详细介绍和baseParams属性介绍

 

分页原理:
1.Extjs分页是根据store.load({params:{start:0,limit:10}});startlimit这两个参数来进行分页的。
(1).当store第一次load的时候,start=0,limit=10;
(2).当点击翻页按钮时,store进行load,此时 start=start+pageSize。

2.为了分页Json字符串中要加上totalProperty来表示记录的总条数。
如:totalProperty:'total'
3.后台的返回json中必须包含有totalProperty属性的字段。
如:string json = "{'total':"+count+",'root':[{},{}]";


baseParams与Store.load({params:{}})的区别:   
(1).baseParams里的参数是一直存在的,

(2).params里的参数,只有load时才会传递过去,当调用reload时参数就不存在了

 

 

一.分页语句:

new Ext.PagingToolbar({
    pageSize: pageSize,
    store: store,
    displayInfo: true,
    displayMsg: '当前显示 {0} - {1} ,共{2}条记录',
    emptyMsg: "没有数据",
    items: ['-']
})

 

二.注意事项:

1.分页中用到的store必须加上“totalCount”属性!!!

2.store加载时也需要给定startlimit两个参数来进行分页查询

3.重新加载时:

(1).若用reload可不用再设置分页的start和limit参数

(2).若还是用load,则还是要继续设置该参数

 

三.实例分析:

1.Store:

/*-----1.创建数据源------*/
var newsStore = new Ext.data.JsonStore({
	url:"getNews.ftl?doType=getNews",
	root:"data",
	totalProperty:'totalCount',
	fields: ["id","title","type","creator",{ name: 'createDate', type: 'date', dateformat: 'Y-m-d'},"ishot"]
});

 

2.ColumnModel:

/*-----3.创建ColumnModel------*/
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel({
	columns:[
		sm,
		{
			header:"编号",
			dataIndex:"id",
			hidden:true
		},{
			header:"新闻标题",
			dataIndex:"title",
			width:500
		},{
			header:"新闻类型",
			dataIndex:"type",
			width:120,			
			renderer:function(v){
				if(v == 1){
					return "通知公告"
				}
				else {
					return "企业动态";
				}
			}
		},{
			header:"是否热点新闻",
			dataIndex:"ishot",
			width:140,
			renderer:function(v){
				if(v == 1){
					return "<span style=\"color:#ff44aa;font-weight: bold;\">热点新闻</span>"
				}
				else {
					return "普通新闻";
				}
			}
		},{
			header:"创建者",
			dataIndex:"creator",
			width:140
		},{
			header:"创建时间",
			dataIndex:"createDate",
			width:140,
		  	renderer : Ext.util.Format.dateRenderer('Y-m-d')
		}
	]
});

   
 

3.GridPanel:

var newsGrid = new Ext.grid.GridPanel({
	title:"新闻管理",
	store:newsStore,
	cm:cm,
	sm:sm,
	view:newsView,
	loadMask:{msg:"正在加载数据,请稍后......"},
	height:80,
	tbar:[
		{
			text:"增加新闻",
			iconCls: 'add',
			handler:function(){
				location.href = "addNews.jsp";
			}
		},{
			text:"编辑新闻",
			iconCls:"edit",
			handler:showUpdateWin
		},{
			text:"删除新闻",
			iconCls:"remove",
			handler:removeNews
		},{
			text:"发布新闻",
			iconCls:"audit",
			handler:removeNews
		},{
			text:"预览新闻",
			iconCls: 'view',
			handler:viewNews
		},"-",{
			id:"byTitle",
			xtype:"label",
			text:"标题:"
		},{
			id:"paras",
			xtype:"textfield",
			enableKeyEvent:true,
			listeners:{
				"specialKey":function(f,e){
					if(e.getKey() == e.ENTER){
						var paras = Ext.getCmp("paras").getValue();
						var type = Ext.getCmp("byType").getValue();
						newsStore.baseParams.pParas = paras;
						newsStore.baseParams.pType = type;
                               newsStore.reload();
						//newsStore.load({params:{start:0,limit:pageSize}});
					}
				}
			}
		},"-",{
			xtype:"label",
			text:"类型:"
		},{
			id:"byType",
			xtype:"combo",
			value:'', 
	        width:90,
	        mode : 'local', 
	        triggerAction :'all', 
	        forceSelection:true,
	        store : new Ext.data.SimpleStore({ 
	        	fields : ["id", "name"], 
	        	data : [ 
					['', '全部'],     
		        	['0', '企业动态'], 
		        	['1', '通知公告']
	         	] 
        	}),
	        valueField : "id", 
	        displayField : "name", 
	        readOnly: true
		},"-",{
			text: '搜索',
        	iconCls: 'filter',
        	listeners:{
        		"click":function(){
        			var paras = Ext.getCmp("paras").getValue();
					var type = Ext.getCmp("byType").getValue();
					newsStore.baseParams.pParas = paras;
					newsStore.baseParams.pType = type;
                       newsStore.reload();
					//newsStore.load({params:{start:0,limit:pageSize}});
        		}
        	}
		}
	],
	bbar:new Ext.PagingToolbar({
        pageSize: pageSize,
        store: newsStore,
        displayInfo: true,
        displayMsg: '当前显示 {0} - {1} ,共{2}条记录',
        emptyMsg: "没有数据",
        items: ['-']
    })
});


 

4.在Ext初始化时对store的load事件加入startlimit参数:

Ext.onReady(function(){
	Ext.BLANK_IMAGE_URL = path + '/js/ext/resources/images/default/s.gif';
	Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
	Ext.QuickTips.init();
	new Ext.Viewport({
		layout: 'fit',
		items: [newsGrid]
	});
	newsStore.load({params:{start:0,limit:40}});
	
	/*解决日期控件在谷歌浏览器中的样式问题*/
	if(Ext.isChrome==true){       
    	var chromeDatePickerCSS = ".x-date-picker {border-color: #1b376c;background-color:#fff;position: relative;width: 185px;}";
    	Ext.util.CSS.createStyleSheet(chromeDatePickerCSS,'chromeDatePickerStyle');
	}
});

 

5.Servlet代码:

String paras = request.getParameter("pParas");
String typeStr = request.getParameter("pType");;
String startStr = request.getParameter("start")==null?"0":request.getParameter("start");
String limitStr = request.getParameter("limit")==null?"0":request.getParameter("limit");
if (typeStr == null || typeStr.equals("")) {
	typeStr = "-1";
}
int type = Integer.valueOf(typeStr);
int start = Integer.valueOf(startStr);
int limit = Integer.valueOf(limitStr);
INewsDao newsDao = new NewsDaoImpl();
int count = newsDao.getNewsCount(type, paras);
String data = newsDao.getNews(start, limit, type, paras);
String json = "{\"totalCount\":" + count + ",\"data\":" + data + "}";
response.setContentType("text/json;charset=UTF-8");
out = response.getWriter();
out.print(json);
out.close();
return;

 

6.获取News新闻信息的Dao方法:

public String getNews(int start, int limit, int type, String paras) {
	Session s = null;
	String data = null;
	try {
		s = HibernateUtil.getSession();
		s.beginTransaction();
		StringBuffer sb = new StringBuffer("select * from news");
		if (paras != null && !paras.equals("")) {
			sb.append(" where title like '%" + paras + "%'");
			if (type != -1) {
				sb.append(" and type ="+type);
			}
		}else if (type != -1) {
			sb.append(" where type = " + type);
		}
		sb.append(" order by create_date desc");
		SQLQuery query = s.createSQLQuery(sb.toString());
		query.setFirstResult(start)
			.setMaxResults(limit);//分页
		List<News> list = query.addEntity(News.class).list();
		data = JSON.toJSONString(list);//通过fastjson将list转成json字符串
		s.getTransaction().commit();
	} catch (Exception e) {
		logger.error(e.toString());
		HibernateUtil.endSession(s);
	} finally {
		HibernateUtil.endSession(s);
	}
	return data;
}

注意:获取到的list要用FastJson转化成Json字符串

 

获取到的List(News)转化成的Json数据:

[
  {
    "content": "&nbsp;测试上传文件34",
    "createDate": "2014-12-10 15:57:51",
    "creator": "管理员",
    "dir": "D:\\Program Files\\apache-tomcat-7.0.27\\webapps\\czfc\\newsHtmls\\2014\\12",
    "fileName": "1418198271600.html",
    "id": 146,
    "ishot": 0,
    "status": 1,
    "tag": "测试上传文件",
    "title": "测试上传文件",
    "type": 1,
    "uploadDir": "D:\\newsFile\\2014\\12",
    "uploadFile": "HtmleditorDemo.rar"
  },
  {
    "content": "坚持以提高经济发展质量和效益为中心,主动适应经济发展新常态,保持经济运行在合理区间。",
    "createDate": "2014-12-09 09:44:39",
    "creator": "管理员",
    "dir": "D:\\Program Files\\apache-tomcat-7.0.27\\webapps\\czfc\\newsHtmls\\2014\\12",
    "fileName": "1418089479358.html",
    "id": 136,
    "ishot": 1,
    "status": 1,
    "tag": "“新常态”思路下,2015年经济增长目标会否下调,是否会降息、降准,明年经济工作的主要任务又会重点聚焦哪些领域,持续引发关注。",
    "title": "聚焦中央经济工作会议:新常态下经济增速引关注",
    "type": 1,
    "uploadFile": "news.txt"
  }
]

 

最终传回页面的带totalCount的Json数据:

{
  "totalCount": 2,
  "data": [
    {
      "content": "&nbsp;测试上传文件34",
      "createDate": "2014-12-10 15:57:51",
      "creator": "管理员",
      "dir": "D:\\Program Files\\apache-tomcat-7.0.27\\webapps\\czfc\\newsHtmls\\2014\\12",
      "fileName": "1418198271600.html",
      "id": 146,
      "ishot": 0,
      "status": 1,
      "tag": "测试上传文件",
      "title": "测试上传文件",
      "type": 1,
      "uploadDir": "D:\\newsFile\\2014\\12",
      "uploadFile": "HtmleditorDemo.rar"
    },
    {
      "content": "坚持以提高经济发展质量和效益为中心,主动适应经济发展新常态,保持经济运行在合理区间。",
      "createDate": "2014-12-09 09:44:39",
      "creator": "管理员",
      "dir": "D:\\Program Files\\apache-tomcat-7.0.27\\webapps\\czfc\\newsHtmls\\2014\\12",
      "fileName": "1418089479358.html",
      "id": 136,
      "ishot": 1,
      "status": 1,
      "tag": " “新常态”思路下,2015年经济增长目标会否下调,是否会降息、降准,明年经济工作的主要任务又会重点聚焦哪些领域,持续引发关注。",
      "title": "聚焦中央经济工作会议:新常态下经济增速引关注",
      "type": 1,
      "uploadFile": "news.txt"
    }
  ]
}

   
 

 

图示:

 

  • 大小: 6.4 KB
  • 大小: 13.6 KB
  • 大小: 10.3 KB
  • 大小: 15.1 KB
  • 大小: 15.7 KB
  • 大小: 9.1 KB
  • 大小: 2 KB
  • 大小: 11 KB
分享到:
评论

相关推荐

    extjs 分页

    下面将详细阐述EXTJS分页的核心概念、实现方法以及DAO和Action在其中的作用。 一、EXTJS分页核心概念 1. Store:EXTJS中的Store是用来存储数据的容器,它可以连接到各种数据源,包括本地数组、远程JSON、XML等。...

    extjs 分页是碰到的问题,点击下一页事,查询条件无法传递

    在开发基于Extjs的应用程序时,分页是一项常用且重要的功能。然而,在实际应用过程中可能会遇到一些问题,比如当用户点击“下一页”时,原有的查询条件未能正确传递到后端,导致返回的数据与预期不符。本文将详细...

    extjs学习 分页后台处理

    以下是对EXTJS分页后台处理的详细说明: 首先,`Store`对象是EXTJS中用于存储数据的核心组件。在你的代码中,`Store`被创建并配置了`baseParams`、`JsonReader`和`HttpProxy`。 1. `baseParams`: 这个属性用于传递...

    SSH+ExtJs分页小例子

    在IT领域,SSH和ExtJS是两种常用的开发技术。SSH是指Spring、Struts和Hibernate三个开源框架的组合,常用于构建企业级Java Web应用。而ExtJS是一个强大的JavaScript库,用于构建用户界面,特别是数据驱动的富客户端...

    extjs 树型分页组件

    同时,EXTJS还支持数据过滤和排序,结合分页使用可以提供更好的用户体验。 7. 示例代码 创建一个树型分页组件的基本步骤如下: ```javascript var store = Ext.create('Ext.data.TreeStore', { model: '...

    Extjs分页使用java实现数据库数据查询.docx

    总结来说,实现ExtJS分页查询的关键在于前端和后端的协同工作。前端通过Store、Proxy和Paging Toolbar处理用户交互,后端通过Servlet接收请求,执行数据库操作,并返回符合约定的数据格式。通过这种方式,可以有效地...

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

    以上是ExtJS Grid实现后台分页的基础步骤和关键概念。实际应用中,可能还需要处理更多的细节,如错误处理、动态加载列等。对于初学者来说,理解这些核心概念并结合具体的代码示例进行实践,能有效提升ExtJS开发能力...

    extjs 简单分页例子

    EXTJS通过其Grid组件支持分页,Grid组件是一个可配置的表格视图,能够显示大量数据并进行排序、筛选和分页操作。 首先,我们需要创建一个EXTJS Grid组件。在JS文件中,定义Grid的基本配置,包括列模型(column ...

    ExtJs分页

    ExtJS 分页是一种在Web应用中管理大量数据的常见技术,尤其在与Spring MVC框架集成时,能够提供高效的数据展示和交互。在ExtJS中,分页通常与数据网格(Grid)组件一起使用,用于显示从后端服务(如SQL Server 2008...

    extjs文档的详细介绍

    本文将详细介绍EXTJS中两种主要的前后台数据传递方法:`Ext.Ajax.request` 和 `FormPanel` 的 `getForm().submit()`。 首先,`Ext.Ajax.request` 是EXTJS提供的一个全局Ajax对象,用于发送异步HTTP请求。它的基本...

    Extjs grid分页1

    综上所述,ExtJS Grid的分页功能提供了一种高效的方式来处理和展示大量数据。通过合理的配置和使用,可以创建出响应快速、用户体验良好的数据网格应用。理解并熟练掌握这些概念和技术,对于开发高效、用户友好的Web...

    extjs4.2 分页combo动态条数 源码

    在这个场景中,我们关注的是在EXTJS的Combobox(下拉框)组件中实现分页和动态加载数据的功能。Combobox通常用于展示有限数量的选项,但在大数据集的情况下,一次性加载所有数据可能导致页面性能下降。因此,引入...

    EXTJS分页全面分析

    本文详细介绍了EXTJS中`GridPanel`分页技术的具体实现过程,包括客户端和服务端两大部分。通过上述步骤可以实现一个完整的分页功能,不仅能够提高用户体验,还能够有效提升应用程序的性能。开发者可以根据实际需求...

    extjs属性方法大全

    以上是 `Extjs` 中常用的表单类及其属性和方法的详细介绍,这些类和方法提供了丰富的功能,帮助开发者快速构建功能完备的 Web 表单应用。通过掌握这些基础知识,可以有效地提高开发效率并确保应用程序的质量。

    Extjs chekboxtree PagingTreeLoader 多选、分页

    本篇将深入探讨ExtJS中的"Chekboxtree"(复选框树)与"PagingTreeLoader"(分页树加载器)这两个特性,以及如何结合它们实现多选和分页功能。 "Chekboxtree"是ExtJS中的一种特殊树形组件,它允许用户通过复选框选择...

    SpringMvc+MyBatis+ehcache+ExtJs分页

    Spring MVC、MyBatis、Ehcache和ExtJS这四个技术组件都是开发者们在构建此类应用时常常使用的工具。让我们详细了解一下这些技术以及它们如何协同工作。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web...

    Extjs树分页组件扩展

    通过扩展TreeLoader,我们可以添加新的方法和属性来支持分页加载。例如,可以添加一个`pageSize`属性来定义每页显示的节点数量,以及一个`loadPage`方法来请求特定页码的数据。 **PagingToolbar的扩展** ...

    Extjs grid分页多选记忆功能

    很多同事在用extjs grid做分页的时候,往往会想用grid的多选功能来实现导出Excel之类的功能(也就是所谓的多选记忆功能),但在选选择下一页的时候 上一页选中的已经清除 这是因为做分页的时候又向服务器请求了分页...

    ExtJs自定义分页控件----PM3PagingToolbar.js

    非传统分页工具. 简单说明下: 显示第一页与最后一页. 显示当前页对称的前后几页(可以自定义显示多少页). 其它的页码省略. 点击省略号, 省略号隐藏, 显示一个与省略号相同宽度的页面跳转转入框. 整个设置还比较智能....

    Struts2+Json+ExtJS分页

    ### Struts2+Json+ExtJS分页技术详解 #### 一、技术背景与概述 在Web开发领域,实现高效的数据展示与交互是至关重要的。本文档将介绍如何使用Struts2框架结合JSON数据格式以及ExtJS前端库来实现动态分页功能。此...

Global site tag (gtag.js) - Google Analytics