`
alfredgao
  • 浏览: 135791 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

ExtGrid数据库分页实现

阅读更多

转载自http://ext.group.iteye.com/group/blog/201891

 

看了robbin 关于hibernate 分页的老帖(http://www.iteye.com/topic/261),把ext grid 的数据库分页整了下,完全满足需要,呵呵,贴出代码与大家共同学习下:
DAO代码:
Java代码 复制代码
  1.   /**  
  2.        * 获取符合查询条件的记录总数  
  3.        * @param detachedCriteria  hibernate Criteria 查询对象,由service组装  
  4.        * @return  
  5.        */  
  6.   public Long getRecordCount(final DetachedCriteria detachedCriteria) {   
  7.         return (Long) getHibernateTemplate().execute(new HibernateCallback() {   
  8.             public Object doInHibernate(Session session)   
  9.                     throws HibernateException {   
  10.                 Criteria criteria = detachedCriteria   
  11.                         .getExecutableCriteria(session);   
  12.                 long count = Long.parseLong((criteria.setProjection(Projections   
  13.                         .rowCount()).uniqueResult()).toString());   
  14.                 criteria.setProjection(null);   
  15.                 return Long.valueOf("" + count);   
  16.             }   
  17.         }, true);   
  18.     }   
  19. /**  
  20.        * 获取符合条件的查询记录  
  21.        * @param detachedCriteria  
  22.        * @param startResult  
  23.        * @param limitResult  
  24.        * @return  
  25.        */  
  26.   
  27.     public List listByConditions(final DetachedCriteria detachedCriteria,   
  28.             final int startResult, final int limitResult) {   
  29.   
  30.         return (List) getHibernateTemplate().execute(new HibernateCallback() {   
  31.             public Object doInHibernate(Session session)   
  32.                     throws HibernateException {   
  33.                 Criteria criteria = detachedCriteria   
  34.                         .getExecutableCriteria(session);   
  35.                 criteria.setFirstResult(startResult);   
  36.                 criteria.setMaxResults(limitResult);   
  37.                 return criteria.list();   
  38.             }   
  39.         }, true);   
  40.     }    
  41.     
  /**
	   * 获取符合查询条件的记录总数
	   * @param detachedCriteria  hibernate Criteria 查询对象,由service组装
	   * @return
	   */
  public Long getRecordCount(final DetachedCriteria detachedCriteria) {
		return (Long) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session)
					throws HibernateException {
				Criteria criteria = detachedCriteria
						.getExecutableCriteria(session);
				long count = Long.parseLong((criteria.setProjection(Projections
						.rowCount()).uniqueResult()).toString());
				criteria.setProjection(null);
				return Long.valueOf("" + count);
			}
		}, true);
	}
/**
	   * 获取符合条件的查询记录
	   * @param detachedCriteria
	   * @param startResult
	   * @param limitResult
	   * @return
	   */

	public List listByConditions(final DetachedCriteria detachedCriteria,
			final int startResult, final int limitResult) {

		return (List) getHibernateTemplate().execute(new HibernateCallback() {
			public Object doInHibernate(Session session)
					throws HibernateException {
				Criteria criteria = detachedCriteria
						.getExecutableCriteria(session);
				criteria.setFirstResult(startResult);
				criteria.setMaxResults(limitResult);
				return criteria.list();
			}
		}, true);
	} 
  

服务层:
Java代码 复制代码
  1. /**  
  2.      * 获取所有日志列表  
  3.      * @param startResult   查询记录起点  
  4.      * @param limitResult   简要列表每页最大记录数  
  5.      * @param sortRecord    简要列表排序字段名  
  6.      * @param dirRecord     简要列表排序类型 DESE/ASC  
  7.      * @return  
  8.      */  
  9. public JSONArray getAllLogs(String startResult,String limitResult,   
  10.               String sortRecord,String dirRecord) {   
  11.            
  12.         try {   
  13.             DetachedCriteria detachedCriteria = DetachedCriteria.forClass(TDeasLog.class);     
  14.             if(dirRecord.equals("ASC"))   
  15.                 detachedCriteria.addOrder(Order.asc(sortRecord));   
  16.             else  
  17.                 detachedCriteria.addOrder(Order.desc(sortRecord));   
  18.                  
  19.             Long count = logDAO.getRecordCount(detachedCriteria);//获取符合条件的记录总数       
  20.                  
  21.             List list = logDAO.listByConditions(detachedCriteria, Integer.parseInt(startResult),    
  22.                       Integer.parseInt(limitResult));//获取符合条件记录   
  23.             if(list.size()>0){   
  24.                 List jsonlist = new ArrayList();   
  25.                 Iterator it = list.iterator();   
  26.                 while (it.hasNext()){   
  27.                     Log log = (Log )it.next();   
  28.                     Map map = new HashMap();   
  29.                     map.put("taskId", log .getTaskId());   
  30.                     map.put("rwfssj", log .getRwfssj());   
  31.                     map.put("rwjssj", log .getRwjssj());   
  32.                             ....                                                       
  33.                     jsonlist.add(map);                 
  34.                 }   
  35.                 Map m = new  HashMap();   
  36.                 m.put("results", count.toString());   
  37.                 m.put("rows", jsonlist);   
  38.                    
  39.                 JSONArray jsonArray = JSONArray.fromObject(m);   
  40.                 return jsonArray;     
  41.             }else  
  42.                 return null;   
  43.         } catch (Exception e) {   
  44.             e.printStackTrace();   
  45.             return null;   
  46.         }   
  47.     }  
/**
	 * 获取所有日志列表
     * @param startResult   查询记录起点
     * @param limitResult   简要列表每页最大记录数
     * @param sortRecord    简要列表排序字段名
     * @param dirRecord     简要列表排序类型 DESE/ASC
	 * @return
	 */
public JSONArray getAllLogs(String startResult,String limitResult,
			  String sortRecord,String dirRecord) {
		
		try {
			DetachedCriteria detachedCriteria = DetachedCriteria.forClass(TDeasLog.class);  
			if(dirRecord.equals("ASC"))
				detachedCriteria.addOrder(Order.asc(sortRecord));
			else
				detachedCriteria.addOrder(Order.desc(sortRecord));
			  
			Long count = logDAO.getRecordCount(detachedCriteria);//获取符合条件的记录总数	  
			  
			List list = logDAO.listByConditions(detachedCriteria, Integer.parseInt(startResult), 
					  Integer.parseInt(limitResult));//获取符合条件记录
			if(list.size()>0){
				List jsonlist = new ArrayList();
				Iterator it = list.iterator();
				while (it.hasNext()){
					Log log = (Log )it.next();
					Map map = new HashMap();
					map.put("taskId", log .getTaskId());
					map.put("rwfssj", log .getRwfssj());
					map.put("rwjssj", log .getRwjssj());
							....													
					jsonlist.add(map);				
				}
				Map m = new  HashMap();
				m.put("results", count.toString());
				m.put("rows", jsonlist);
				
				JSONArray jsonArray = JSONArray.fromObject(m);
				return jsonArray;  
			}else
				return null;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}


action 代码:

Java代码 复制代码
  1.     
  2. public ActionForward getAllLogs(ActionMapping mapping, ActionForm form,   
  3.             HttpServletRequest request, HttpServletResponse response) {   
  4.            
  5.         String startResult = request.getParameter("start");   
  6.         String limitResult = request.getParameter("limit");   
  7.         String sortRecord = request.getParameter("sort");   
  8.         String dirRecord = request.getParameter("dir");   
  9.            
  10.         JSONArray jsonArray = this.getLogService().getAllLogs(startResult,limitResult,sortRecord,dirRecord);           
  11.            
  12.         if(jsonArray != null){   
  13.             String jsonstr = jsonArray.toString();   
  14.             //去除JSON对象前的[]     
  15.             String json = jsonstr.substring(1, jsonstr.length()-1);            
  16.             response.setContentType("text/json; charset=utf-8");    
  17.             try {   
  18.                 response.getWriter().print(json);   
  19.             } catch (IOException e) {   
  20.                 log.error("获取日志实例列表失败,异常:"+e.getMessage());   
  21.             }   
  22.         }else{//返回空数据,格式:{"rows":[],"results":"0"}   
  23.             List list = new ArrayList();   
  24.             Map map1 = new HashMap();   
  25.             list.add(map1);   
  26.             Map m = new  HashMap();   
  27.             m.put("results""0");   
  28.             m.put("rows", list);   
  29.             JSONArray json = JSONArray.fromObject(m);          
  30.             String jsonString = json.toString();   
  31.             String jsonstr =jsonString.substring(1, jsonString.length()-1);   
  32.             response.setContentType("text/json; charset=utf-8");    
  33.             try {   
  34.                 response.getWriter().print(jsonstr);   
  35.             } catch (IOException e) {   
  36.                 log.error("获取日志实例列表失败,异常:"+e.getMessage());   
  37.             }   
  38.         }          
  39.         return null;   
  40.     }  
 
public ActionForward getAllLogs(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		
		String startResult = request.getParameter("start");
		String limitResult = request.getParameter("limit");
		String sortRecord = request.getParameter("sort");
		String dirRecord = request.getParameter("dir");
		
		JSONArray jsonArray = this.getLogService().getAllLogs(startResult,limitResult,sortRecord,dirRecord);		
		
		if(jsonArray != null){
			String jsonstr = jsonArray.toString();
			//去除JSON对象前的[]  
			String json = jsonstr.substring(1, jsonstr.length()-1);			
			response.setContentType("text/json; charset=utf-8"); 
			try {
				response.getWriter().print(json);
			} catch (IOException e) {
				log.error("获取日志实例列表失败,异常:"+e.getMessage());
			}
		}else{//返回空数据,格式:{"rows":[],"results":"0"}
			List list = new ArrayList();
			Map map1 = new HashMap();
			list.add(map1);
			Map m = new  HashMap();
			m.put("results", "0");
			m.put("rows", list);
			JSONArray json = JSONArray.fromObject(m);		
			String jsonString = json.toString();
			String jsonstr =jsonString.substring(1, jsonString.length()-1);
			response.setContentType("text/json; charset=utf-8"); 
			try {
				response.getWriter().print(jsonstr);
			} catch (IOException e) {
				log.error("获取日志实例列表失败,异常:"+e.getMessage());
			}
		}		
		return null;
	}

开始无数据时怎么也不能显示PagingToolbar 的emptyMsg,后来发现空数据时组织格式错误,忘记去掉 [{"rows":[],"results":"0"}]这部分的“[]”,这个小问题折磨了俺好久,呵呵,要细心啊~!
JS代码:
Js代码 复制代码
  1.   var datastore = new Ext.data.Store({   
  2.        proxy: new Ext.data.HttpProxy({   
  3.            url: 'logManage.do?method=getAllLogs'  
  4.        }),   
  5.        reader: new Ext.data.JsonReader({   
  6.         root               : 'rows',   
  7.            totalProperty      : 'results',   
  8.            id: 'taskID'  
  9.        }, [   
  10.            {name: 'taskId'},   
  11.            {name: 'rwfssj'},   
  12.            {name: 'rwjssj'},   
  13.            ....   
  14.        ]),   
  15.         remoteSort: true  
  16.    });   
  17.    datastore.setDefaultSort('taskId','ASC');   
  18.    datastore.load({params:{start:0, limit:10}});   
  19.        
  20. var sm = new Ext.grid.CheckboxSelectionModel();   
  21. var colModel = new Ext.grid.ColumnModel([   
  22.     new Ext.grid.RowNumberer(),   
  23.     { header:'任务ID', width:100, sortable:true, locked:true, dataIndex:'taskId'},   
  24.     { header:'任务类型', width:100, sortable:true, locked:false, dataIndex:'rwlb'},   
  25.     { header:'任务状态', width:100, sortable:true, locked:false, dataIndex:'rwzt'},   
  26.     ......   
  27. ]);   
  28.        
  29. var LogGrid = new Ext.grid.GridPanel({   
  30.     ds                  : datastore,   
  31.     cm                  : colModel,   
  32.     sm                  : sm,   
  33.     id                  : 'LogGrid',   
  34.     title               : '日志列表',   
  35.     autoHeight          : true,   
  36.        width               : '100%',   
  37.        loadMask            : true,   
  38.      buttons            : [{   
  39.             text        : '查询',   
  40.             tooltip     : '日志查询',   
  41.             handler     : logSearch   
  42.      },{   
  43.             text        : '关闭',   
  44.             tooltip     : '关闭窗口',   
  45.             handler     : closeForm   
  46.      }],   
  47.        buttonAlign         : 'right',   
  48.        bbar                : new Ext.PagingToolbar({   
  49.            id              : 'pagingbar',   
  50.            pageSize        : 10,   
  51.            store           : datastore,   
  52.            displayInfo     : true  
  53.             })         
  54. });  
   var datastore = new Ext.data.Store({
        proxy: new Ext.data.HttpProxy({
            url: 'logManage.do?method=getAllLogs'
        }),
        reader: new Ext.data.JsonReader({
        	root               : 'rows',
            totalProperty      : 'results',
            id: 'taskID'
        }, [
            {name: 'taskId'},
            {name: 'rwfssj'},
            {name: 'rwjssj'},
            ....
        ]),
         remoteSort: true
    });
    datastore.setDefaultSort('taskId','ASC');
    datastore.load({params:{start:0, limit:10}});
		
	var sm = new Ext.grid.CheckboxSelectionModel();
	var colModel = new Ext.grid.ColumnModel([
		new Ext.grid.RowNumberer(),
		{ header:'任务ID', width:100, sortable:true, locked:true, dataIndex:'taskId'},
		{ header:'任务类型', width:100, sortable:true, locked:false, dataIndex:'rwlb'},
		{ header:'任务状态', width:100, sortable:true, locked:false, dataIndex:'rwzt'},
		......
	]);
		
	var LogGrid = new Ext.grid.GridPanel({
		ds					: datastore,
		cm					: colModel,
		sm					: sm,
		id                  : 'LogGrid',
		title				: '日志列表',
		autoHeight 		    : true,
        width               : '100%',
        loadMask            : true,
		 buttons            : [{
		        text	    : '查询',
				tooltip	    : '日志查询',
				handler   	: logSearch
		 },{
		        text	    : '关闭',
				tooltip	    : '关闭窗口',
				handler	    : closeForm
		 }],
        buttonAlign         : 'right',
        bbar                : new Ext.PagingToolbar({
            id              : 'pagingbar',
            pageSize        : 10,
            store           : datastore,
            displayInfo     : true
             })		
	});

搞定,收工....
分享到:
评论

相关推荐

    ext grid 合计行

    结果在extjs的老家找到一个前辈写的代码,可以在grid上面加上合计, <br>但是却只能合计grid里面的数据,但是我们平常一般是只显示20行或者30行,这样的合计就没有什么意义,我们的合计数据是单独从数据库里面...

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

    使用ext3.0 实现 GridPanel 分页显示,调用后台数据 ,格式为json,数据使用 xml 无数据库下载就可以运行,与dwr结合

    Ext4.0分页的Grid例子

    后台使用的是struts2生成Ext所需要的json,把webroot下的ext4下面加入ext的开发包,然后再把create.sql中的脚本在数据库中执行,代码就可以跑起来了,我用的是mysql数据库

    Ext.net后台分页增删改

    Ext.net数据库后台分页,树状图,Grid增删改查,由于公司下个项目要用到Ext.net,所以就写了一个小小的列子,说实话Ext.net网上资源太少了!一直在琢磨中!

    ext grid tree 应用

    自己编写的EXT例子,grid、tree从数据库读取数据动态显示,并进行分页。可以动态更换主题,并存入cookies中。

    ext.net基础控件示例

    ext.net一些控件的基本使用方法 包括布局、事件、grid的绑定(包含增删改)以及数据库分页还有表单绑定取值和dateview控件的使用

    Extjs分页使用Java实现数据库数据查询

    关于Ext分 页功能的实现。项目用的是js、Ext、servlet。下面贴下代码: var obj = this; var pageSize = 20; //统计结果分页每一页显示数据条数 //在这里使用Store来创建一个类似于数据表的结构,因为需要远程...

    Ext制作的教务管理系统[源码+数据库+说明]

    5.grid数据加载,分页,编辑删除。 6.用户列表页面点编辑时,在父页面的TabPanel中增加一个标签,下放置一个iframe,将编辑 页面Url(带参数)放入iframe。 7.页面间传值[如:列表页面传ID给编辑页面] 8.FormPanel...

    ext.net示例

    包括布局、事件、grid的绑定(包含增删改)以及数据库分页还有表单绑定取值和dateview控件的使用,树的使用,包含拖拉,修改等操作 dll文件为extnet3.5,可自行下载黏贴到要目录下的net35文件夹里即可

    ssh-orcale-ext基础学习

    ssh-orcale-ext 实现ext的分页,grid的编辑并异步保存到数据库, 以及viewport等一些ext的基础知识,算是学了两个星期的小结吧。 对新手应该会有帮助。一个完整的工程, 带有.sql文件,导入表和数据,修改数据库连接...

    Ext+JS高级程序设计.rar

    第3章 Ext Core实例—.NET语言实现 35 3.1 创建应用并设置开发环境 35 3.2 自定义Membership提供程序 37 3.3 创建母版页 38 3.4 首页设计 42 3.5 产品列表页 47 3.6 产品详细信息页 51 3.7 登录对话框 56 3.8 用户...

    一个基于ext的ajax小例子

    <br>在grid的演示部分,包括了分页的数据调用和如何处理来自于dwr的数据(dwr的部分和官方网站公布的方法一样) 以及grid的事件处理。 <br>实例的源代码中没有包括jar包,如果需要运行,请根据jar.jpg所...

    ExtJS6.5.0+SSM表格增删改查+分页

    1.使用ExtJS6.5.0+SSM 2.实现Grid表格的增删改查和分页,数据库使用的是MySql, 3.项目代码和数据脚本齐全 4.Jar齐全,加载即可运行 5.VX:humingxing可随时交流

    2008最新框架源码,简单清晰明了

    4,在中间区域实现了grid 并且实现了分页,根据类型的不同动态显示,因为这个grid是嵌套在tabpanel里面的,这样就可以显示无限个grid,当查看某个grid的时候,无须在请求服务器,就可以查看,另外tabpanel可以动态的...

    Ext_Dwr_Spring_Hibernate完美结合,工程实例

    其中edit-grid2.html页面中的数据是利用dwr调spring,进过spring中的业务方法掉hibernate来操作数据库完成的,涉及数据库的增,删,改,查。 涉及分页。利用到了PagingDWRProxy,DWRProxy等。 是在以前发的一个例子...

    后台管理模板

    4,在中间区域实现了grid 并且实现了分页,根据类型的不同动态显示,因为这个grid是嵌套在tabpanel里面的,这样就可以显示无限个grid,当查看某个grid的时候,无须在请求服务器,就可以查看,另外tabpanel可以动态的...

    搭建系统框架源码下载

    1,主要是Ext2.2|vs2008|C#|Sql2005|三层|多层,务必是数据库sql2005才可以,因为里面的分页sql语句采用了sql2000不支持的语法。 2,系统里面主要了一些ext的组件:grid,tab,combox,button,toolbutton等,基本上...

    精通JS脚本之ExtJS框架.part1.rar

    9.5.2 Ext.grid.GroupingView的配置操作 9.6 可拖放的表格 9.6.1 拖放改变表格的大小 9.6.2 在同一个表格里拖放 9.6.3 表格之间的拖放 9.6.4 表格与树之间的拖放 第10章 设计树状结构布局 10.1 TreePanel的...

    精通JS脚本之ExtJS框架.part2.rar

    9.5.2 Ext.grid.GroupingView的配置操作 9.6 可拖放的表格 9.6.1 拖放改变表格的大小 9.6.2 在同一个表格里拖放 9.6.3 表格之间的拖放 9.6.4 表格与树之间的拖放 第10章 设计树状结构布局 10.1 TreePanel的...

    extjs实例与学习资料

    因为前段时间有两个专案要用到extjs技术,所以自己学了一段...grid,tree,显示树信息的TreePanel、用于显示表格的GridPanel及EditorGridPanel,还有代表应用程序窗口的Ext.Window,与数据库交付,希望对初学者带来帮助

Global site tag (gtag.js) - Google Analytics