使用datagrid 进行分页

来源:互联网 发布:三维建筑设计软件apm 编辑:程序博客网 时间:2024/04/30 20:12

先是页面

datagrid是easyui中的所以:

引入相关js与css

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/default/easyui.css"><link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/js/easyui/themes/icon.css"><script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.8.3.js"></script><script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/jquery.easyui.min.js"></script><script type="text/javascript" src="${pageContext.request.contextPath }/js/easyui/locale/easyui-lang-zh_CN.js"></script>
body中写一个表格并给予一个ID (该ID是为了给datagrid用的)
<body><div region="center" border="false" style="height: 400px"><table id="jq"></table></div></body>

使用的ajax请求获取的数据

<script type="text/javascript">
var toolbar = [ {//工具栏id : 'add',text : '增加',iconCls:'icon-add'}, {id : 'delete',text : '删除',iconCls:'icon-remove'} ,{id : 'edit',text : '编辑',iconCls:'icon-edit'} ,{id : 'find',text : '查找',iconCls:'icon-search'} ];var columns = [ [ {//表头field : 'id',//field 标识字符,一定要与类的字段对应,这样才能获取服务端传回的数据,其它属性查apititle : '编号',width : '100',align : 'center'}, {field : 'username',title : '姓名',width : '100',align : 'center'}, {field : 'salary',title : '工资',width : '100',align : 'center'}, {field : 'birthday',title : '生日',width : '100',align : 'center'}, {field : 'gender',title : '性别',width : '200',align : 'center'}, {field : 'station',title : '区域',width : '200',align : 'center'}, {field : 'telphone',title : '电话',width : '200',align : 'center'} ] ];
$(function() {$('#jq').datagrid({url : "${pageContext.request.contextPath}/jqAction_pageQuery.action",    //相关属性自行查apicolumns : columns,toolbar:toolbar,fit : true,idField : 'username',border : false,striped : true,iconCls : 'icon-forward', pagination:true, //pageSize:10,pageList:[2,5,7]});})</script>

这样页面就展示就完成了,开始写java代码,要分页肯定要有一个bean。


package com.itheima.bos.utils;import java.util.List;/** * 封装分页信息 * @author zhaoqx * */public class JqBean {/**d当前页数*/private int currPage;/**每页显示的记录数*/private int row;/**总记录数*/private int total;/**总页数*///private int totalPage;/**显示的数据集合*/private List rows;
/*说明一下总页数,我认为datagrid应该在底层封装了算法,使用了datagrid就不需要自己算,不然就自己算,个人觉得是
if(total%row==0){

totalPage = total/row;
}else{
totalPage = (total/row)+1;
}
如果有不对的还请指出,谢谢。
*/
public int getCurrPage() {return currPage;}public void setCurrPage(int currPage) {this.currPage = currPage;}public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}//public int getTotalPage() {//return totalPage;//}//public void setTotalPage(int totalPage) {//this.totalPage = totalPage;//}public List getRows() {return rows;}public void setRows(List rows) {this.rows = rows;}}




action

package com.itheima.bos.web.action;import java.io.IOException;import net.sf.json.JSONObject;import net.sf.json.JsonConfig;import org.apache.struts2.ServletActionContext;import org.hibernate.criterion.DetachedCriteria;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import com.itheima.bos.domain.Jq;import com.itheima.bos.service.JqService;import com.itheima.bos.utils.JqBean;import com.itheima.bos.utils.PageBean;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;@Controller@Scope("prototype")public class JqAction extends ActionSupport implements ModelDriven<Jq>{private Jq jq;public Jq getModel() {// TODO Auto-generated method stubreturn jq;}private int page;private int rows;@Autowiredprivate JqService jqservice;public void setPage(int page) {this.page = page;}public void setRows(int rows) {this.rows = rows;}public String pageQuery() throws Exception{JqBean jb = new JqBean();jb.setRow(rows);jb.setCurrPage(page);jqservice.pageQuery(jb);
//将bean转为json对象,设定编码格式并返回给客户端
JsonConfig js =new JsonConfig();js.setExcludes(new String[]{"row","currpage"});

JSONObject jso =JSONObject.fromObject(jb, js);String jsos = jso.toString();
ServletActionContext.getResponse().setContentType("text/json;charest=utf-8");ServletActionContext.getResponse().getWriter().print(jsos);return NONE;}}


service没啥写的就是开启事物调用dao的方法。

dao

package com.itheima.bos.dao.impl;import java.util.List;import org.hibernate.SessionFactory;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Projections;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.springframework.stereotype.Repository;import com.itheima.bos.dao.JqDao;import com.itheima.bos.domain.Jq;import com.itheima.bos.utils.JqBean;import com.itheima.bos.utils.PageBean;@Repositorypublic class JqDaoImpl extends HibernateDaoSupport implements JqDao{//继承了HibernateDaoSupport 必须注入session工厂不然会报错,至于原因我也不太清楚@Autowired  public void setSessionFactory0(SessionFactory sessionFactory){   super.setSessionFactory(sessionFactory);  }public void pageQuery(JqBean jb) {// TODO Auto-generated method stubint crp = jb.getCurrPage();int num = jb.getRow();/*通过hql语句 * String hql = "select count(*) from Jq";List <Long>ls = (List<Long>) this.getHibernateTemplate().find(hql);*///通过改变Hibernate框架发出的sql形式DetachedCriteria dc = DetachedCriteria.forClass(Jq.class);dc.setProjection(Projections.rowCount());List<Long> ls = (List<Long>) this.getHibernateTemplate().findByCriteria(dc);//记得设为null,也就是默认的select * from ....。不然后面的list没有值dc.setProjection(null);int total;if(ls.size()>0){total = ls.get(0).intValue();}else{total = 0;}jb.setTotal(total);int begin = (crp-1)*num;List lst = this.getHibernateTemplate().findByCriteria(dc, begin, num);jb.setRows(lst);}}
最后就是struts的配置action了,自己去做吧

原创粉丝点击