亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP通用分頁框架

2020-07-27 21:28:21
字體:
來源:轉載
供稿:網友

寫一個通用的分頁框架,這樣在項目里面如果想實現分頁功能,只需要稍加改動參數就可以實現分頁處理了。這樣寫了會節省很多時間。

一.分頁類

既然要分頁那么我們就要考慮建一個通用的分頁類,里面需要的參數一般有:

總頁數 totalPage

總共記錄數 totalRecord

每頁顯示數 pageSize

當前頁pageIndex

承載當前頁數據的集合 List datas

完整代碼:Page.java

import java.util.List;public class Pager<E> {/*** 總共頁數*/private int totalPages;/*** 總共記錄數*/private int totalRecords;/*** 每頁顯示數量*/private int pageSize;/*** 當前頁*/private int pageIndex;/*** 當前頁數據集合*/private List<E> datas;public void setTotalPages(int totalPages) {this.totalPages = totalPages;}public void setTotalRecords(int totalRecords) {this.totalRecords = totalRecords;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public void setPageIndex(int pageIndex) {this.pageIndex = pageIndex;}public void setDatas(List<E> datas) {this.datas = datas;}public int getTotalPages() {return totalPages;}public int getTotalRecords() {return totalRecords;}public int getPageSize() {return pageSize;}public int getPageIndex() {return pageIndex;}public List<E> getDatas() {return datas;}}

二.用戶類

這里以查詢用戶來做分頁為例,所以就需要一個用戶類

用戶號 userId

用戶姓名 username

用戶密碼 password

注冊時間 regdate

完整代碼

import java.sql.Timestamp;public class User {private int userId;//用戶idprivate String username;//用戶名private String password;//密碼private Timestamp regdate;//注冊時間public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Timestamp getRegdate() {return regdate;}public void setRegdate(Timestamp regdate) {this.regdate = regdate;}}

三.threadLocal提取公用參數

先說如果不提取公共參數,比如pagesize,pageindex,那么我們的查詢方法應該是這樣子:

public void GetUsers(String name,int pagesize,int pageIndex)

如果以后再增加參數,無疑這里的參數會變的很多,所以我們利用threadLocal把pagesize和pageindex提取出來.

先寫這個類

public class SystemContext {//頁大小private static ThreadLocal<Integer> pageSize = new ThreadLocal<>();//當前頁private static ThreadLocal<Integer> pageIndex = new ThreadLocal<>();public static Integer getPageSize() {return pageSize.get();}public static void removePageSize(){pageSize.remove();}public static void setPageSize(int _pageSize) {pageSize.set(_pageSize);}public Integer getPageIndex() {return pageIndex.get();}public void setPageIndex(int _pageIndex) {pageIndex.set(_pageIndex);}public static void removePageIndex(){pageIndex.remove();}}

對于threadLocal,這個變量會在線程中一直存在,那么我們就可以在向服務器發送請求的時候添加參數,服務器返回數據的時候移除參數,一來一回的話,自然而然可以用過濾器

那么過濾器如下:

import com.dao.SystemContext;import javax.servlet.*;import java.io.IOException;public class SystemFilter implements Filter{int pageSize;int pageIndex = 1;@Overridepublic void init(FilterConfig filterConfig) throws ServletException {try {pageSize = Integer.parseInt(filterConfig.getInitParameter("pagesize"));} catch (NumberFormatException e) {pageSize = 15;}}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {try {pageIndex = Integer.parseInt(servletRequest.getParameter("pageindex"));}catch (NumberFormatException e){//什么也不做,pageindex=1}try {//開始請求的時候配置參數SystemContext.setPageSize(pageSize);SystemContext.setPageIndex(pageIndex);filterChain.doFilter(servletRequest,servletResponse);}finally {//請求返回的時候移除參數SystemContext.removePageIndex();SystemContext.removePageSize();}}@Overridepublic void destroy() {}}

用了過濾器,自然要在web.xml中配置過濾器

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><filter><filter-name>SystemFilter</filter-name><filter-class>com.filter.SystemFilter</filter-class><!--配置沒頁大小--><init-param><param-name>pagesize</param-name><param-value>15</param-value></init-param></filter><filter-mapping><filter-name>SystemFilter</filter-name><!--這里配置需要分頁的頁面--><url-pattern>/index.jsp</url-pattern></filter-mapping></web-app>

這樣的好處不言而喻,結構清晰,修改方便.接下來是分頁代碼

四.分頁代碼

分頁代碼應該寫一個接口和實現類的,這里演示項目就寫在了一起

import com.util.Pager;import com.util.User;import java.sql.*;import java.util.ArrayList;import java.util.List;public class UserDAO {private Connection conn = null;private ResultSet rs = null;private PreparedStatement ps = null;// public static void main(String[] args) {// UserDAO dao = new UserDAO();// dao.GetUsers("",15,1);// dao.close();// }public UserDAO() {String driverName = "com.mysql.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/fenyedemo";String user = "root";String password = "123456";try {Class.forName(driverName);conn = DriverManager.getConnection(url,user,password);} catch (ClassNotFoundException e) {System.out.println("沒有發現驅動");e.printStackTrace();} catch (SQLException e) {System.out.println("獲取連接失敗");e.printStackTrace();}}/*** 具體分頁實現代碼* @param name 查詢條件* @return*/public Pager GetUsers(String name){//獲取分頁參數int pagesize = SystemContext.getPageSize();int pageIndex = SystemContext.getPageIndex();//分頁具體sql語句String sql = "select * from user ";String sqlCount = "select count(*) from user ";if (name!=null && !name.trim().equals("")){sql += "where username LIKE %"+name+"%";sqlCount += "where username LIKE %"+name+"%";}sql += " LIMIT ?,?";//存放當前頁的集合List<User> datas = new ArrayList<>();//存放當前分頁的集合Pager<User> pages = new Pager<>();User userTemp = null;try {ps = conn.prepareStatement(sql);if(pageIndex<=0) pageIndex=1;//設置參數ps.setInt(1,(pageIndex-1)*pagesize);ps.setInt(2,pagesize);rs = ps.executeQuery();//循環取出,添加到datas中while (rs.next()){userTemp = new User();userTemp.setUserId(rs.getString("id"));userTemp.setUsername(rs.getString("username"));userTemp.setPassword(rs.getString("password"));userTemp.setRegdate(rs.getTimestamp("regdate"));datas.add(userTemp);}//最后設置pagespages.setPageIndex(pageIndex);pages.setPageSize(pagesize);ps = conn.prepareStatement(sqlCount);rs = ps.executeQuery();while(rs.next()){pages.setTotalRecords(rs.getInt(1));pages.setTotalPages((rs.getInt(1)-1)/pagesize+1);}pages.setDatas(datas);} catch (SQLException e) {System.out.println("獲取出錯");e.printStackTrace();}return pages;}public void close(){try {if (rs!=null) rs.close(); rs = null;if (ps!=null) ps.close(); ps = null;if (conn!=null) conn.close(); conn = null;} catch (SQLException e) {System.out.println("關閉失敗");e.printStackTrace();}}}

五.jsp測試頁面

普通頁面就是顯示數據,這個很簡單,代碼如下

<%@ page import="com.dao.UserDAO" %><%@ page import="com.util.Pager" %><%@ page import="com.util.User" %><%@ page import="java.util.Iterator" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><%String condition = request.getParameter("condition");UserDAO userDAO = new UserDAO();Pager<User> pages = null;if (condition!=null && !condition.trim().equals("")){pages = userDAO.GetUsers(condition);}else {pages = userDAO.GetUsers(null);}userDAO.close();%><html><head><title>測試用例</title></head><body><h1 align="center">分頁測試</h1><table align="center" border="1" width="700"><tr><td colspan="100%"><form method="get" action="index.jsp"><input type="text" name="condition"><input type="submit" value="查詢"></form></td></tr><tr><th>ID</th><th>USERNAME</th><th>PASSWORD</th><th>DATA</th></tr><%for (Iterator it = pages.getDatas().iterator(); it.hasNext() ; ) {User userTemp = (User) it.next();%><tr><td><%=userTemp.getUserId()%></td><td><%=userTemp.getUsername()%></td><td><%=userTemp.getPassword()%></td><td><%=userTemp.getRegdate()%></td></tr><% }%></table></body></html>

此時已經有一些效果了

 這里寫圖片描述

六.JSP頁面添加控制選項

添加控制選項這里使用分頁框架pager-taglib,也是為了更好的支持通用性.

首先在index.jsp頁面查詢之后靜態引入一個新的頁面,作為底部控制頁面

使用方法,就是去下載相應的jar,然后引入到項目的lib中即可

這里寫圖片描述

<tr><td colspan="100%"><jsp:include page="fenye.jsp"><jsp:param name="items" value="<%=pages.getTotalRecords()%>"/><jsp:param name="maxPageItems" value="<%=pages.getPageSize()%>"/><jsp:param name="maxIndexPages" value="10"/><jsp:param name="params" value="condition"/></jsp:include></td></tr>

下面開始寫fenye.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %><%int items = Integer.parseInt(request.getParameter("items"));int maxPageItems = Integer.parseInt(request.getParameter("maxPageItems"));int maxIndexPages = Integer.parseInt(request.getParameter("maxIndexPages"));String params = request.getParameter("params");%><%--引入分頁框架--%><%@taglib prefix="pg" uri="http://jsptags.com/tags/navigation/pager" %><%--參數依次是項目總數 每頁顯示數量 下方菜單顯示數 當前頁curPage--%><pg:pager items="<%=items%>" maxPageItems="<%=maxPageItems%>" maxIndexPages="<%=maxIndexPages%>" export="curPage=pageNumber"><pg:param name="<%=params%>"/><pg:first><a href="<%=pageUrl%>">首頁</a></pg:first><pg:prev><a href="<%=pageUrl%>">上一頁</a></pg:prev><pg:pages><%if(curPage==pageNumber) {%>[<%=pageNumber %>]<%} else {%><a href="<%=pageUrl%>"><%=pageNumber %></a><%}%></pg:pages><pg:next><a href="<%=pageUrl %>">下一頁</a></pg:next><pg:last><a href="<%=pageUrl %>">尾頁</a></pg:last></pg:pager>

分頁設計基本就是上面框架,重點是參數傳遞,這里參數傳遞利用靜態引入的時候,配置jsp:param,然后到fenye,jsp中再取出.
其中pager-taglib中有一個標簽是”/>,這個就是針對我的查詢條件傳遞過來的參數,如果沒傳遞,那么查詢的話點擊下一頁也會出錯,這里還有一個問題就是編碼問題,pager-taglib默認編碼是GB2312,你可以重新打包文件編譯,也可以在tomcat的server.xml文件中配置urlEncording=”utf-8”,這樣就會沒問題了.

這里寫圖片描述

七.總結

這樣的一個框架,如果其他需要實現分頁的就可以直接套用了,建立相應的實體類,寫好分頁代碼,直接套用Systemcontex.java和SystemFilter.java(記得在web.xml配置相應的過濾文件),再jsp中可以直接使用fenye.jsp,這樣就會省下很多麻煩

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜宅男影院在线观看| 亚洲自拍偷拍区| 国产午夜精品一区理论片飘花| 国外成人在线直播| 国产一区欧美二区三区| 欲色天天网综合久久| 亚洲性av网站| 91国产精品视频在线| 日本午夜人人精品| 成人黄色在线播放| 欧美国产在线电影| 在线播放国产一区二区三区| 中文字幕日韩欧美在线视频| 日韩av网站电影| 亚洲毛片在线观看| 精品久久久久久久久久久久| 国产精品老女人视频| 91香蕉电影院| 亚洲女人天堂网| 欧美国产精品人人做人人爱| 韩曰欧美视频免费观看| 国产va免费精品高清在线| 欧美日韩视频免费播放| 久久视频在线视频| 色妞在线综合亚洲欧美| 国内精久久久久久久久久人| 欧美激情亚洲自拍| 国产精品爽黄69| 国产欧美一区二区三区在线| 91国偷自产一区二区三区的观看方式| 国产狼人综合免费视频| 最近更新的2019中文字幕| www.久久久久久.com| 国产成人精品免高潮费视频| 欧美国产日韩精品| 欧美一级在线播放| 亚洲欧美日韩精品久久奇米色影视| 欧美激情视频播放| 欧美丝袜一区二区三区| 欧美区在线播放| 国产日本欧美一区二区三区在线| 国产精品久久久久av免费| 亚洲另类xxxx| 在线日韩精品视频| www.亚洲男人天堂| 日韩精品在线免费观看| 亚洲免费伊人电影在线观看av| 日韩精品免费看| 亚洲欧美日韩精品久久| 亚洲成人精品视频| 久久中文字幕国产| 亚洲精品99999| 欧美日韩aaaa| 人九九综合九九宗合| 色青青草原桃花久久综合| 日韩电影中文字幕av| 亚洲二区在线播放视频| 国内精品在线一区| 欧美日韩一区二区三区| 亚洲专区在线视频| 久久精品国产一区| 91精品国产自产在线观看永久| 亚洲午夜精品久久久久久性色| 亚洲精品网站在线播放gif| 性色av一区二区三区红粉影视| 国产91精品黑色丝袜高跟鞋| 91精品国产91久久久久福利| 亚洲va男人天堂| 欧美精品电影免费在线观看| 久久久国产精品视频| 亚洲专区在线视频| 久久久视频精品| 亚洲国产精品中文| 国产99久久精品一区二区永久免费| 97久久精品视频| 亚洲bt天天射| 欧美丝袜美女中出在线| 欧美性在线观看| 永久免费精品影视网站| 97免费在线视频| 成人精品网站在线观看| 久久久国产在线视频| 亚洲人线精品午夜| 色先锋资源久久综合5566| 欧美激情乱人伦| 久久激情五月丁香伊人| 亚洲人成电影在线播放| 国产一区二中文字幕在线看| 成人淫片在线看| 精品国产一区二区三区久久久狼| 色哟哟入口国产精品| 欧美激情xxxx性bbbb| 欧美大尺度电影在线观看| 日韩av影院在线观看| 成人免费自拍视频| 国产精品伦子伦免费视频| 欧美日韩在线免费观看| 亚洲乱码av中文一区二区| 亚洲美女av电影| 亲爱的老师9免费观看全集电视剧| 成人免费午夜电影| 久热精品视频在线观看| 欧美成人午夜影院| 亚洲欧洲中文天堂| 欧美午夜性色大片在线观看| 91九色蝌蚪国产| 91久久久亚洲精品| 成人黄色免费网站在线观看| 欧美在线精品免播放器视频| 久久久亚洲天堂| 欧美成人精品一区二区| 欧美成年人视频网站| 中文字幕在线看视频国产欧美在线看完整| 亚洲人成在线播放| 日韩电影中文字幕在线观看| 日韩高清av一区二区三区| 久久久久久久久久久久av| 亚洲精品成人网| 日韩av在线导航| 久久久久亚洲精品国产| 久久理论片午夜琪琪电影网| 亚洲精品www| 欧美一级片一区| 成人精品aaaa网站| 一本一本久久a久久精品综合小说| 亚洲第一色在线| 日韩av观看网址| 欧美日韩在线看| 日本精品性网站在线观看| 亚洲成人久久一区| 国产精品免费看久久久香蕉| 久久久免费电影| 日本精品久久中文字幕佐佐木| 日韩在线观看视频免费| 欧美日韩在线视频一区二区| 国产精品日韩一区| 国产日韩欧美成人| 国产精品v片在线观看不卡| 国产综合在线看| 国产伦精品免费视频| 国产精品一区二区在线| 久久99热精品这里久久精品| 日本高清+成人网在线观看| 欧美性一区二区三区| 国产色婷婷国产综合在线理论片a| 日韩精品久久久久久久玫瑰园| 国产成人精品亚洲精品| 性色av香蕉一区二区| 亚洲成人久久久久| 国产午夜精品一区理论片飘花| 国产精品第一区| 国产91|九色| 亚洲国产精品va在线看黑人动漫| 久久精品91久久久久久再现| 欧美大片第1页| 久久久精品一区二区三区| 日韩欧美极品在线观看| 日韩精品免费观看| 欧美激情一区二区三区成人| 国产精品扒开腿做爽爽爽视频| 欧美国产极速在线| 欧美理论电影在线观看| 在线观看精品自拍私拍| 国产精品jizz在线观看麻豆|