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;
}
}