本文仅以记录开发时所使用的ssm结合easyui方法实现分页效果,亲测成功。因本人才疏学浅,尚存在不少不足之处,如对你产生误导,还望见谅。
Controller层:
/**
* 获得某某名下所有用户
* 返回json格式数据
* @param request
* @param response
* @throws Exception
*/
@RequestMapping(value = "listUserWithPageForJson")
public void list(@RequestParam(value="pageNumber",required=false) String pageNumber,@RequestParam(value="pageSize",required=false) String pageSize,Patient patient,HttpServletRequest req,HttpServletResponse resp) throws Exception{
PageModel pageBean=new PageModel(Integer.parseInt(pageNumber),Integer.parseInt(pageSize));
Map<String,Object> map=new HashMap<String,Object>();
String account=req.getParameter("account");
Doctor doctor=doctorService.findByName(account);
int docId=doctor.getDocId();
map.put("doctorId", docId);
map.put("start", pageBean.getStart());
map.put("size", pageBean.getPageSize());
List<Patient> userList=patientService.listUserWithPage(map);
int total=patientService.getTotal(map);
JSONObject result=new JSONObject();
JSONArray jsonArray=JSONArray.fromObject(userList);
result.put("rows", jsonArray);
result.put("total", total);
ResponseUtil.write(resp, result);
}
注意:pageNumber和pageSize是前端页面传递过来的值,分别表示当前页码和每页显示的记录数。
分页查询的核心是后台向前端页面传递json格式的total和rows
serviceImpl层:
//查询指定条件下相应页面的数据
@Override
public List<Patient> listUserWithPage(Map<String, Object> map) throws Exception {
return patientMapper.listUserWithPage(map);
}
//计算指定条件下的记录总数
@Override
public int getTotal(Map<String, Object> map) throws Exception {
int n=patientMapper.getTotal(map);
return n;
}
service和mapper层是serviceImpl层,在此不再单独列出,
mapper.xml里面的sql语句:
《!--查询指定页面的数据--》
<select id="listUserWithPage" parameterType="Map" resultMap="PatientResultMap">
select b.account,b.name,b.sex,b.birthday,b.identityNo,b.mobile_phone,b.memberStatus,a.doctorName FROM pc_doctor a LEFT OUTER JOIN pc_patient b on a.doc_id=b.doctor_id
<where>
<if test="doctorId != null and doctorId!= '0'">
doctor_id =#{doctorId}
</if>
</where>
<if test="start!=null and size!=null">
limit #{start},#{size}
</if>
</select>
《!--计算总数--》
<select id="getTotal" parameterType="Map" resultType="Integer">
select count(*) from pc_patient
<where>
<if test="doctorId != null and doctorId!= '0'">
doctor_id =#{doctorId}
</if>
</where>
</select>
依赖的工具类:
//分页的实体类:
public class PageModel {
private int page; // 第几页
private int pageSize; // 每页记录数
private int start; // 起始页
public PageModel(int page, int pageSize) {
super();
this.page = page;
this.pageSize = pageSize;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getStart() {
return (page-1)*pageSize;
}
}
//返回json数据的工具类:
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
public class ResponseUtil {
public static void write(HttpServletResponse response,Object object)throws Exception{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println(object);
out.flush();
out.close();
}
}
前端页面:
import java.io.PrintWriter; import javax.servlet.http.HttpServletResponse; public class ResponseUtil { public static void write(HttpServletResponse response,Object object)throws Exception{ response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); out.println(object); out.flush(); out.close(); } }
<script type="text/javascript">
var userGrid;
$(function(){
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
public class ResponseUtil {
public static void write(HttpServletResponse response,Object object)throws Exception{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println(object);
out.flush();
out.close();
}
}
userGrid = $("#custs").datagrid({
title: "用户列表",
width: "auto",
height: "auto",
idField: "patId",
rownumbers: true,
pagination: true,
pageList: [10, 20, 50, 100],
singleSelect: true,
nowrap: true,
striped: true,
fitColumns: true,
loadMsg: "数据加载中,请稍候...",
toolbar: "#toolbar",
url: "/sz/doctor/listUserWithPageForJson?account=${account}",
queryParams:{pageNumber:1,pageSize:10},//查询参数
frozenColumns: [[{
field: "ck",
checkbox: true
}]],
columns: [[{
field: "name",
title: "姓名",
width: 80,
align: "center"
}, {
field: "identityNo",
title: "身份证号码",
width: 140,
align: "center"
}, {
field: "sex",
title: "性别",
width: 60,
align: "center",
formatter:function(value){
if(value == 1){
return "男";
}else if(value == 2){
return "女";
}
return "";
}
}, {
field: "mobilePhone",
title: "手机号",
width: 100,
align: "center"
}, {
field: "memberStatus",
title: "是否签约",
width: 80,
align: "center",
formatter: function(val){
if(val){
return "是";
}else{
return "否";
}
}
}, {
field: "doctorName",
title: "签约医生",
width: 80,
align: "center"
}]],
//如果后端返回的json的格式直接是data={total:xx,rows:{xx}},不需要设置loadFilter了,
//如果有多层封装,比如data.jsonMap = {total:xx,rows:{xx}},则需要在loadFilter处理一下。
/*
loadFilter: function(data){
if(data.jsonMap) {
return data.jsonMap;
}
}*/
});
onSelectPage: function (pageNumber, pageSize) {//切换页面时触发事件
find(pageNumber, pageSize);
}
});
});
function find(pageNumber, pageSize)
{
$("#custs").datagrid('getPager').pagination({ pageNumber : pageNumber,pageSize : pageSize});//重置
$("#custs").datagrid("loading"); //加屏蔽
$.ajax({
type : "POST",
dataType : "json",
data : {
pageNumber : pageNumber,
pageSize : pageSize
},
url : "/krksz/doctor/listUserWithPageForJson?account=${account}",
success : function(data) {
$("#custs").datagrid('loadData',data);
$("#custs").datagrid("loaded"); //移除屏蔽
},
error : function(err) {
$.messager.alert('操作提示', '获取信息失败...请联系管理员!', 'error');
$("#custs").datagrid("loaded"); //移除屏蔽
}
});
}
在开发当中,借鉴了http://www.cnblogs.com/zjITgrow/p/6077070.html,在此表示感激。
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
public class ResponseUtil {
public static void write(HttpServletResponse response,Object object)throws Exception{
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println(object);
out.flush();
out.close();
}
}