jqGrid分页首先要在页面设置一个DIV的层。例如,在第一章就提到的
同时,要在jqGrid的配置中加入
jQuery("#grid_id").jqGrid({ ... pager : '#pager', ... });
参照第二章
效果如下
同时,这jqGrid中,在分页可以设定各种属性,例如没有找到数据时显示的提示。
jQuery("#grid_id").jqGrid({ ... pager : '#pager', emptyrecords: "Nothing to display", ... });
而这些,也可以再i18n的文件中进行配置。很少这样直接更改。系统默认的显示是
recordtext: "View {0} - {1} of {2}", emptyrecords: "No records to view", loadtext: "Loading...", pgtext : "Page {0} of {1}"
在分页导航条中,还可以对属性进行修改,分页导航的属性有
属性名 | 类型 | 说明 | 默认值 | 是否可以被修改 |
lastpage | integer | 只读属性,总页数 | 0 | NO |
pager | mixed | 导航栏对象,必须是一个有效的html元素,位置可以随意 | 空字符串 | NO |
pagerpos | string | 定义导航栏的位置,默认分为三部分:翻页,导航工具及记录信息 | center | NO |
pgbuttons | boolean | 是否显示翻页按钮 | true | NO |
pginput | boolean | 是否显示跳转页面的输入框 | true | NO |
pgtext | string | 页面信息,第一个值是当前页第二个值是总页数 | 语言包 | YES |
reccount | integer | 只读属性,实际记录数,千万不能跟records 参数搞混了,通常情况下他们是相同的,假如我们定义rowNum=15,但我们从服务器端返回的记录为20即records=20,而reccount=15,表格中也显示15条记录。 | 0 | NO |
recordpos | string | 定义记录信息的位置,可选值:left, center, right | right | NO |
records | integer | 只读属性,从服务器端返回的记录数 | none | NO |
recordtext | string | 显示记录的信息,只有当viewrecords为true时起效,且记录数必须大于0 | 语言包 | yes |
rowList | array[] | 可以改变表格可以显示的记录数,格式为[10,20,30] | 空array[] | no |
rowNum | integer | 设置表格可以显示的记录数 | 20 | yes |
viewrecords | boolean | 是否要显示总记录数信息 | false | no |
所有这些参数都是可以修改的,比如:
<script> ... jQuery("#grid_id").setGridParam({rowNum:10}).trigger("reloadGrid"); ... </script>
同时,分页有一个事件,很少需要用到
事件名 | 参数 | 说明 |
onPaging | pgButton | 当点击翻页按钮但还为展现数据时触发此事件,当然这跳转栏输入页码改变页时也同样触发此事件。参数pgButton可选值: first,last,prev,next |
同时要注意和后台的交互。jqGrid在分页的时候向后台传递的参数有
/* * 分页 */ private Integer page;// 当前页 private Integer total;// 总页数 private Integer pageSize = 20;// 每页显示多少 private Integer records;// 总记录数 private List<studentbean> rows;// 记录 </studentbean>
所以,我们可以通过书写一份分页公共类来进行。
分页Bean
public class Page { private int count = 0; // 记录总数 private int pageSize = 20; // 每页显示记录数 private int pageCount = 0; // 总页数 private int page = 1; // 当前页数 private String totalCountSQL;// 得到总记录数sql语句 private String listSQL;// 得到查询记录sql语句 public int getCount() { return count; } public void setCount(int count) { this.count = count; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public String getTotalCountSQL() { return totalCountSQL; } public void setTotalCountSQL(String totalCountSQL) { this.totalCountSQL = totalCountSQL; } public String getListSQL() { return listSQL; } public void setListSQL(String listSQL) { this.listSQL = listSQL; } }
分页的接口
public interface IPage { public List getList(PageBean page); public List getList(PageBean page, Map param); public Long getTotalCount(PageBean p,Map param); public Long getTotalCount(PageBean page); }
分页实现
@Service("page") @SuppressWarnings("unchecked") public class PageImpl implements IPage { @Resource private SessionFactory sessionFactory; public List getList(PageBean page) { Query query = sessionFactory.getCurrentSession().createQuery( page.getListSQL()); query.setMaxResults(page.getPageSize()); query.setFirstResult((page.getPage() - 1) * page.getPageSize()); return query.list(); } public List getList(PageBean page, Map param) { Query query = sessionFactory.getCurrentSession().createQuery( page.getListSQL()); if (null != param) { Iterator it = param.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String key = (String) entry.getKey(); Object val = entry.getValue(); query.setParameter(key, val); } } return query.list(); } public Long getTotalCount(PageBean p, Map param) { Query query = sessionFactory.getCurrentSession().createQuery(p.getTotalCountSQL()); if (null != param) { Iterator it = param.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String key = (String) entry.getKey(); Object val = entry.getValue(); query.setParameter(key, val); } } return (Long) query.uniqueResult(); } public Long getTotalCount(PageBean p) { return (Long) sessionFactory.getCurrentSession().createQuery(p.getTotalCountSQL()).uniqueResult(); } }
Action类完整代码
@ParentPackage("json-default") @Namespace("/admin/json") public class StudentListAction implements ServletRequestAware { @Resource private IPaginate paginate; private HttpServletRequest request; /* * 分页 */ private Integer page;// 当前页 private Integer total;// 总页数 private Integer pageSize = 20;// 每页显示多少 private Integer records;// 总记录数 private List<studentbean> rows;// 记录 public StudentListAction() { System.out.println(new Date()); } public Integer getPage() { return page; } public void setPage(Integer page) { this.page = page; } public Integer getTotal() { return total; } public void setTotal(Integer total) { this.total = total; } @JSON(serialize = false) public Integer getPageSize() { return pageSize; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getRecords() { return records; } public void setRecords(Integer records) { this.records = records; } public List</studentbean><studentbean> getRows() { return rows; } public void setRows(List</studentbean><studentbean> rows) { this.rows = rows; } public void setServletRequest(HttpServletRequest request) { this.request = request; } @Action(value = "jsondata", results = { @Result(type = "json") }) public String execute() throws Exception { get(); return com.opensymphony.xwork2.Action.SUCCESS; } @SuppressWarnings("unchecked") private void get() throws Exception { PageBean pageBean = new PageBean(); pageBean.setPage(page); pageBean.setPageSize(pageSize); JqGridHandler handler = new JqGridHandler(request); pageBean.setTotalCountSQL("select count(*) from Student " + handler.getWheres(null, false) + handler.getOrders(null, false)); pageBean.setListSQL("from Student " + handler.getWheres(null, false) + handler.getOrders(null, false)); pageBean.setCount(paginate.getTotalCount(pageBean).intValue()); List<student> list = paginate.getList(pageBean); rows = new ArrayList<studentbean>(); for (Student student : list) { StudentBean bean = new StudentBean(); bean.setAge(student.getAge()); bean.set__department_id(student.getDepartment().getId()); bean.setId(student.getId()); bean.setName(student.getName()); bean.setSex(student.getSex()); bean.setDate(student.getDate()); rows.add(bean); } total = pageBean.getPageCount(); records = pageBean.getCount(); } } </studentbean></student></studentbean>