看了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
})
});
搞定,收工....
分享到:
相关推荐
总结来说,"ext grid json分页显示"是通过EXT.js的Grid组件结合DWR的Ajax能力,实现前端数据的分页加载和显示。这种方式既提高了用户界面的响应速度,又有效管理了大数据量的显示,是现代Web应用中常用的数据展示...
在本文中,我们将深入探讨如何在EXT Grid中实现服务器端分页,这在处理大量数据时尤为关键。EXT Grid是一款强大的JavaScript组件,用于构建交互式的数据视图,而服务器端分页则是优化性能、提高用户体验的重要策略。...
在本文中,我们将深入探讨如何使用Ext JS 2.0框架中的Grid组件实现分页功能,结合PHP后端进行数据处理。Grid组件是Ext JS中一个强大的数据展示工具,能够以表格形式展示大量数据,而分页则是处理大数据集时不可或缺...
在与后端数据库交互时,`Ext Grid`通常结合`Ajax`或者`Store`来实现数据的动态加载。 1. **配置`Ext Store`**:在`Ext`中,`Store`是用于存储和管理数据的容器。我们需要创建一个`Store`实例,配置数据源(如:`...
总结来说,本示例通过Ext JS的Grid组件实现了前端的分页展示,同时利用Servlet在后台处理数据分页逻辑,两者配合实现了完整的前后端分页功能。这种分页方式在实际项目中非常常见,有效提高了用户体验,减轻了服务器...
在这个例子中,开发者通过编写自定义代码,实现了从数据库动态读取数据并显示在Grid和Tree中,同时支持分页功能,极大地提高了用户体验。 1. **EXT Grid**: EXT Grid是EXT JS中的核心组件之一,用于展示大量数据。...
在本文中,我们将深入探讨如何使用Ext Grid与Direct Web Remoting (DWR)技术结合,实现一个具有分页功能的列表展示。首先,让我们逐一了解这些关键组件。 1. **Ext Grid**: Ext Grid是Ext JS库中的核心组件,用于...
通过`Ext.grid.Panel`的`plugins`属性启用分页插件`Ext.grid.plugin.PagingToolbar`,并与`store`的`proxy`配置相结合,可以实现按需从服务器请求数据。`proxy`中的`type`设置为`ajax`或`rest`,并配置`api`属性来...
在IT领域,这个标题涉及到的是一个使用EXT JS(一种基于JavaScript的富客户端框架)和JSON(JavaScript Object Notation)数据格式,结合SQL Server数据库实现分页功能的示例。EXT JS允许开发者创建复杂的、交互式的...
在这个例子中,我们将探讨如何使用EXT连接SQL Server数据库,实现Editgridpanel的数据展示、分页、查询和删除功能。 首先,EXT中的Editgridpanel是一个可编辑的表格组件,用于显示和编辑数据。它集成了数据绑定和行...
10. **EXT Grid与数据库**: EXT Grid是展示大量数据的利器,配合Store和Proxy,可以轻松实现数据的加载、排序、过滤和编辑等功能,所有这些操作都可以与数据库交互。 通过以上知识点,我们可以构建一个完整的EXT...
结果在extjs的老家找到一个前辈写的代码,可以在grid上面加上合计, <br>但是却只能合计grid里面的数据,但是我们平常一般是只显示20行或者30行,这样的合计就没有什么意义,我们的合计数据是单独从数据库里面...
后台使用的是struts2生成Ext所需要的json,把webroot下的ext4下面加入ext的开发包,然后再把create.sql中的脚本在数据库中执行,代码就可以跑起来了,我用的是mysql数据库
在"Ext.NET后台分页增删改"这个主题中,我们将探讨如何利用Ext.NET实现数据库后台分页、树形视图操作以及Grid面板的CRUD(创建、读取、更新和删除)功能。 首先,让我们深入了解一下后台分页。在Ext.NET中,为了...
这个例子在.NET环境中展示了如何有效地使用ExtGrid,包括显示数据、增删改查(CRUD)操作以及分页功能。下面将详细介绍这些知识点。 1. **Ext JS**:Ext JS是一个用于构建富客户端Web应用的JavaScript框架,它提供...
这篇博客“Ext中对于多种store数据分页实现示例”将深入探讨EXT JS中如何实现数据的分页展示,这对于处理大量数据的应用至关重要。 首先,EXT JS提供了两种主要的分页方式:服务器端分页(Server-side pagination)...
首先,EXT JS的分页组件是建立在Grid Panel基础上的,通过配置Store和Pager组件来实现。在给定的示例中,EXT JS与Struts2框架结合,使用MVC模式处理请求和响应。 在`DisplayAction`类中,我们看到了一个模拟数据...
### Ext + DWR 实现分页功能 #### 一、引言 在Web开发中,分页是一项常用的功能,尤其当数据量较大时,合理的分页处理不仅能提升用户体验,还能减轻服务器的压力。本文将详细介绍如何利用Ext框架结合DWR(Direct ...
EXT-JS提供了AjaxSource或JsonStore两种方式来实现这一点。以下是一个使用JsonStore的例子: ```javascript var store = Ext.create('Ext.data.JsonStore', { fields: ['name', 'age', 'email'], proxy: { type:...
通过研究这个例子,你可以更好地理解和掌握Ext Grid的使用,同时也可以学习到如何处理日期和时间,以及如何与数据库进行交互。 总之,Ext Grid是Ext JS中强大的数据展示工具,结合其他组件和JavaScript的日期处理...