博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ajax 分页 步骤和代码
阅读量:5806 次
发布时间:2019-06-18

本文共 9135 字,大约阅读时间需要 30 分钟。

1.pageUtil工具类

2.DAO两个方法,获得总记录数getPageCounts(),获得分页LIST,findByPage(PageUtil util)

3.Servlet 调用这两个方法得到分页的list,把list整体转换成json格式的数据 传递给前台

4.前台jsp页面,设置page分页区域

5.jquery页面加载中初始化分页js方法。

      $(function(){

        function   pageInit(pageIndex){

           $.ajax({ .....

              success:callback   

               })

            function  callback(data){ 以json等格式包装的(data)以json格式包装的data,遍历信息,

              清空上次信息

              遍历data

              拼接本次信息(这个list(拼接到需要ajax异步的地方。)

             }

          }

          页面js点击$("#one/back/next/").click(function(){ }

      })

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

代码=====================================daoImpl

package cn.bdqn.dao;

import java.sql.SQLException;

import java.util.List;

import cn.bdqn.bean.News_Detail;

import cn.bdqn.util.BaseDao;
import cn.bdqn.util.PageUtil;
import cn.bdqn.util.ResultSetUtil;

public class NewsDaoImpl extends BaseDao implements NewsDao {

@Override

public int getPageCounts() {
String sql = "select count(1) from news_detail";
rs = executeQuery(sql);
int rowNum = 0;
try {
if (rs.next()) {
rowNum = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeConnection();
}
return rowNum;
}

@Override

public List<News_Detail> findNewsByPage(PageUtil util) {
String sql = "select * from news_detail limit ?,? ";
Object[] params = { (util.getPageIndex() - 1) * util.getPageSize(),
util.getPageSize() };
rs = executeQuery(sql, params);
return ResultSetUtil.eachResultSet(rs, News_Detail.class);
}
}

============================================servlet

package cn.bdqn;

import java.io.IOException;

import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.bdqn.bean.News_Detail;

import cn.bdqn.dao.NewsDao;
import cn.bdqn.dao.NewsDaoImpl;
import cn.bdqn.util.PageUtil;

import com.google.gson.Gson;

@WebServlet("/ListServlet")

public class ListServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
// 调用service层的代码 我们没写 直接调用dao
NewsDao dao = new NewsDaoImpl();

PageUtil util = new PageUtil();

// 获取数据库的总记录数
util.setTotalCount(dao.getPageCounts());
// 获取前台传递的参数
String num = req.getParameter("pageIndex");
if (num != null && num != "") {
util.setPageIndex(Integer.parseInt(num));
} else {
util.setPageIndex(1);
}

System.out.println("==================>" + num);

// 调用后台代码 获取 list集合

List<News_Detail> list = dao.findNewsByPage(util);
if (list != null) {
list.get(0).setPageUtil(util); // 给分页的属性赋值
// 需要把list整体转换成json格式的数据 传递给前台
Gson gson = new Gson();
String json = gson.toJson(list);
System.out.println(json);
resp.setHeader("content-type", "text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.print(json);
writer.close();
}

}

}

====================================================jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<table>
<thead>
<tr>
<th>新闻标题</th>
<th>新闻作者</th>
<th>新闻摘要</th>
</tr>
</thead>
<tbody id="tbody">
</tbody>
</table>
<input type="hidden" name="pageIndex">
<a href="" id="one">首页</a>
<a href="" id="back">上一页</a>
<a href="" id="next">下一页</a>
<a href="" id="last">尾页</a>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
//分页的四要素
var pageIndex=""; //当前页
var pageSize="";//页大小
var totalPageCount=""; //总页数
var totalCountSize=""; //总记录数
//用户第一次打开这个inde.jsp页面什么数据都没有! 但是必须得有!!!访问后代数据库
pageInit(pageIndex); // 初始化数据
function pageInit(pageIndex){
$("#one").show();
$("#back").show();
$("#next").show();
$("#last").show(); //第一次显示 所有的 超链接
//使用ajax访问servlet
$.ajax({
url:"ListServlet",
type:"POST",
data:{"pageIndex":pageIndex}, //把用户传递的当前页 发送给后台servlet
dataType:"json",
contentType:"application/x-www-form-urlencoded;charset=utf-8",
success:callback //调用回调函数
});
//data 就是 后台传递过来的数据
//每次都需要清空上次的内容
$("#tbody").html("");
$(data).each(function(){ // each start回调函数
if (this.pageUtil!=null) { //给分页四要素赋值
pageIndex=this.pageUtil.pageIndex;
pageSize=this.pageUtil.pageSize;
totalPageCount=this.pageUtil.pageCount;
totalCountSize=this.pageUtil.totalCount;
}
/*开始给tbody拼接
使用快捷键 shift+alt +a 给每一行增加 " +
ctrl+f 替换所有的{ }
*/
$("#tbody").append(
" <tr><td>"+this.title+"</td> "
+" <td>"+this.author+"</td> "
+" <td>"+this.summary+"</td> </tr> ");
});
} // each end
})// callback end
$("#one").click(function(){ //首页
pageInit(1);
});
$("#last").click(function(){ //尾页
pageInit(totalPageCount);
});
$("#back").click(function(){ //上一页
if((pageIndex-1)>0){
pageInit(pageIndex-1);
}else{
$("#one").hide();
$("#back").hide();
}
});
$("#next").click(function(){ //下一页
if((pageIndex+1)<=totalPageCount){
pageInit(pageIndex+1);
}else{
$("#last").hide();
$("#next").hide();
}
});
</script>
</body>
</html>

===========================================pageUtil

package cn.bdqn.util;

/**

* 分页的工具类
*/
public class PageUtil {
private int totalCount;// 总记录数 通过sql从数据库中获取
private int pageSize = 3;// 页大小 每页显示的条数
private int pageCount;// 总页数
private int pageIndex;// 当前页

public int getTotalCount() {

return totalCount;
}

/**

* 我们在获取总记录数之后,肯定可以得出 总页数
* 001.总记录数通过sql从数据库中获取
* 002.三元表达式 进行判断 并赋值总页数pageCount
*
* 总页数=(总记录数%页大小==0)?(总记录数/页大小):(总记录数/页大小+1);
*
* @param totalCount
* 总记录数
*/
public void setTotalCount(int totalCount) {
if (totalCount > 0) {
this.totalCount = totalCount;
this.pageCount = (totalCount % pageSize == 0) ? (totalCount / pageSize)
: (totalCount / pageSize + 1);// 总页数
}
}

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 getPageIndex() {

return pageIndex;
}

public void setPageIndex(int pageIndex) {

this.pageIndex = pageIndex;
}

public PageUtil(int totalCount, int pageSize, int pageCount, int pageIndex) {

super();
this.totalCount = totalCount;
this.pageSize = pageSize;
this.pageCount = pageCount;
this.pageIndex = pageIndex;
}

public PageUtil() {

super();
}

@Override

public String toString() {
return "PageUtil [totalCount=" + totalCount + ", pageSize=" + pageSize
+ ", pageCount=" + pageCount + ", pageIndex=" + pageIndex + "]";
}

}

===============================================================rs的set,get方法

package cn.bdqn.util;

import java.lang.reflect.Field;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**

* 01.从数据库获取ResultSet
* 问题? 运行期间 我们知道ResultSet中是什么类型吗?
* 02.从ResultSet结果集中 获取T类型
* 03.根据T类型,向每个属性 赋值
* 04.放进list集合 返回即可
*/
public class ResultSetUtil {

/**

*
* @param rs
* 从数据库获取的数据结果集
* @param clazz
* T类型
* @return T类型的集合
*/
public static <T> List<T> eachResultSet(ResultSet rs, Class<T> clazz) {
List<T> list = new ArrayList<>();
// 循环ResultSet 01.先获取对象 02.循环属性赋值 03.放进集合
try {
T object = null;
while (rs.next()) {
object = clazz.newInstance(); // 实例化对象
Field[] field = clazz.getDeclaredFields(); // 获取实体类的所有属性,返回Field数组
for (Field f : field) {
f.setAccessible(true); // 可以访问私有属性 并赋值
if (f.getName().equals("pageUtil")) {
continue;
}
f.set(object, rs.getObject(f.getName()));
}
list.add(object); // 放进集合
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return list;
}

/**

*
* @param rs
* 从数据库获取的数据结果集
* @param clazz
* T类型
* @return T类型
*/
public static <T> T findT(ResultSet rs, Class<T> clazz) {
T object = null;
try {
if (rs.next()) {
object = clazz.newInstance(); // 实例化对象
Field[] field = clazz.getDeclaredFields(); // 获取实体类的所有属性,返回Field数组
for (Field f : field) {
f.setAccessible(true); // 可以访问私有属性 并赋值
f.set(object, rs.getObject(f.getName()));
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return object;
}

}

转载于:https://www.cnblogs.com/javaxiaodoufu/p/7471300.html

你可能感兴趣的文章
我的友情链接
查看>>
linux用户家目录无损迁移到独立硬盘
查看>>
文件查找
查看>>
shell编程前言(一)
查看>>
5、centos7.*配置yum的EPEL源及其它源
查看>>
JSON前后台简单操作
查看>>
shell中一些常见的文件操作符
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
使用第三方类、库需要注意的正则类RegexKitLite的使用
查看>>
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
设计模式之-工厂模式、构造函数模式
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>
os模块大全详情
查看>>
【ros】Create a ROS package:package dependencies报错
查看>>
从内积的观点来看线性方程组
查看>>
kali linux 更新问题
查看>>