`
gavin213
  • 浏览: 34195 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

ext grid 数据库分页实现

    博客分类:
  • Ext
阅读更多
     看了robbin 关于hibernate 分页的老帖(http://www.iteye.com/topic/261),把ext grid 的数据库分页整了下,完全满足需要,呵呵,贴出代码与大家共同学习下:
  DAO代码:
 
  /**
	   * 获取符合查询条件的记录总数
	   * @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);
	} 
  

服务层:
/**
	 * 获取所有日志列表
     * @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 代码:

 
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代码:
   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
             })		
	});

   搞定,收工....
分享到:
评论
3 楼 zhuang50255 2012-07-31  

    [*]
[img][/img][url][/url][flash=200,200][/flash]
引用
[/u][i][/i][b][/b][u][/u][u][u][/u]
2 楼 q56454589 2009-01-23  
开始无数据时怎么也不能显示PagingToolbar 的emptyMsg,后来发现空数据时组织格式错误,忘记去掉 [{"rows":[],"results":"0"}]这部分的“[]”,这个小问题折磨了俺好久,呵呵,要细心啊~!

恩 也折磨了我好久!
1 楼 alwgerm 2008-08-17  
我试试哈。。

相关推荐

    ext grid json分页显示

    总结来说,"ext grid json分页显示"是通过EXT.js的Grid组件结合DWR的Ajax能力,实现前端数据的分页加载和显示。这种方式既提高了用户界面的响应速度,又有效管理了大数据量的显示,是现代Web应用中常用的数据展示...

    ext grid带分页(服务器端)

    在本文中,我们将深入探讨如何在EXT Grid中实现服务器端分页,这在处理大量数据时尤为关键。EXT Grid是一款强大的JavaScript组件,用于构建交互式的数据视图,而服务器端分页则是优化性能、提高用户体验的重要策略。...

    ext2.0 grid 分页实例(php)

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

    使用Ext显示数据库中内容

    在与后端数据库交互时,`Ext Grid`通常结合`Ajax`或者`Store`来实现数据的动态加载。 1. **配置`Ext Store`**:在`Ext`中,`Store`是用于存储和管理数据的容器。我们需要创建一个`Store`实例,配置数据源(如:`...

    简单的小例子Ext+servlet 分页

    总结来说,本示例通过Ext JS的Grid组件实现了前端的分页展示,同时利用Servlet在后台处理数据分页逻辑,两者配合实现了完整的前后端分页功能。这种分页方式在实际项目中非常常见,有效提高了用户体验,减轻了服务器...

    ext grid tree 应用

    在这个例子中,开发者通过编写自定义代码,实现了从数据库动态读取数据并显示在Grid和Tree中,同时支持分页功能,极大地提高了用户体验。 1. **EXT Grid**: EXT Grid是EXT JS中的核心组件之一,用于展示大量数据。...

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

    在本文中,我们将深入探讨如何使用Ext Grid与Direct Web Remoting (DWR)技术结合,实现一个具有分页功能的列表展示。首先,让我们逐一了解这些关键组件。 1. **Ext Grid**: Ext Grid是Ext JS库中的核心组件,用于...

    ext grid网格控件实例

    通过`Ext.grid.Panel`的`plugins`属性启用分页插件`Ext.grid.plugin.PagingToolbar`,并与`store`的`proxy`配置相结合,可以实现按需从服务器请求数据。`proxy`中的`type`设置为`ajax`或`rest`,并配置`api`属性来...

    EXT JSON Sqlserver 分页 全部正常运行

    在IT领域,这个标题涉及到的是一个使用EXT JS(一种基于JavaScript的富客户端框架)和JSON(JavaScript Object Notation)数据格式,结合SQL Server数据库实现分页功能的示例。EXT JS允许开发者创建复杂的、交互式的...

    Ext 连接数据库的相关操作

    在这个例子中,我们将探讨如何使用EXT连接SQL Server数据库,实现Editgridpanel的数据展示、分页、查询和删除功能。 首先,EXT中的Editgridpanel是一个可编辑的表格组件,用于显示和编辑数据。它集成了数据绑定和行...

    EXT与数据库交互的事例

    10. **EXT Grid与数据库**: EXT Grid是展示大量数据的利器,配合Store和Proxy,可以轻松实现数据的加载、排序、过滤和编辑等功能,所有这些操作都可以与数据库交互。 通过以上知识点,我们可以构建一个完整的EXT...

    ext grid 合计行

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

    Ext4.0分页的Grid例子

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

    Ext.net后台分页增删改

    在"Ext.NET后台分页增删改"这个主题中,我们将探讨如何利用Ext.NET实现数据库后台分页、树形视图操作以及Grid面板的CRUD(创建、读取、更新和删除)功能。 首先,让我们深入了解一下后台分页。在Ext.NET中,为了...

    ExtGrid使用

    这个例子在.NET环境中展示了如何有效地使用ExtGrid,包括显示数据、增删改查(CRUD)操作以及分页功能。下面将详细介绍这些知识点。 1. **Ext JS**:Ext JS是一个用于构建富客户端Web应用的JavaScript框架,它提供...

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

    这篇博客“Ext中对于多种store数据分页实现示例”将深入探讨EXT JS中如何实现数据的分页展示,这对于处理大量数据的应用至关重要。 首先,EXT JS提供了两种主要的分页方式:服务器端分页(Server-side pagination)...

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

    首先,EXT JS的分页组件是建立在Grid Panel基础上的,通过配置Store和Pager组件来实现。在给定的示例中,EXT JS与Struts2框架结合,使用MVC模式处理请求和响应。 在`DisplayAction`类中,我们看到了一个模拟数据...

    Ext + dwr 实现分页功能

    ### Ext + DWR 实现分页功能 #### 一、引言 在Web开发中,分页是一项常用的功能,尤其当数据量较大时,合理的分页处理不仅能提升用户体验,还能减轻服务器的压力。本文将详细介绍如何利用Ext框架结合DWR(Direct ...

    ext-grid+json简单应用

    EXT-JS提供了AjaxSource或JsonStore两种方式来实现这一点。以下是一个使用JsonStore的例子: ```javascript var store = Ext.create('Ext.data.JsonStore', { fields: ['name', 'age', 'email'], proxy: { type:...

    ext grid 基本功能的学习 另付js 对上周月季度的计算等

    通过研究这个例子,你可以更好地理解和掌握Ext Grid的使用,同时也可以学习到如何处理日期和时间,以及如何与数据库进行交互。 总之,Ext Grid是Ext JS中强大的数据展示工具,结合其他组件和JavaScript的日期处理...

Global site tag (gtag.js) - Google Analytics