`

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 合计行

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

    Ext4.0分页的Grid例子

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

    ext grid tree 应用

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

    Ext.net后台分页增删改

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

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

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

    ext.net基础控件示例

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

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

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

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

    ext.net示例

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

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

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

    ssh-orcale-ext基础学习

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

    精通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的...

    搭建系统框架源码下载

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

    后台管理模板

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

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

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

    Ext_Dwr_Spring_Hibernate完美结合,工程实例

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

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

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

    精通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