先是页面
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 标识字符,一定要与类的字段对应,这样才能获取服务端传回的数据,其它属性查api
title : '编号',
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", //相关属性自行查api
columns : 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;
if(total%row==0){/*说明一下总页数,我认为datagrid应该在底层封装了算法,使用了datagrid就不需要自己算,不然就自己算,个人觉得是
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 stub return jq; } private int page; private int rows; @Autowired private 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);
JsonConfig js =new JsonConfig();js.setExcludes(new String[]{"row","currpage"});//将bean转为json对象,设定编码格式并返回给客户端
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
最后就是struts的配置action了,自己去做吧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; @Repository public 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 stub int 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); } }