`

ext grid 数据库分页实现

阅读更多
看了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"}]这部分的“[]”,这个小问题折磨了俺好久,呵呵,要细心啊~!
 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 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行,这样的合计就没有什么意义,我们的合计数据是单独从数据库里面...

    分页EXT分页EXT

    EXTJS中的分页组件称为`Ext.picker.Paging`或`Ext.toolbar.Paging`,它通常与`Ext.grid.Panel`(表格组件)一起使用,以处理大量数据。分页工具栏包含上一页、下一页、跳转到指定页和显示每页条目数量的选项。 3. ...

    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:...

Global site tag (gtag.js) - Google Analytics