麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JSP > 正文

JSP通用分頁框架

2024-09-05 00:22:27
字體:
來源:轉載
供稿:網友

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

一.分頁類

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

總頁數 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通用分頁框架

六.JSP頁面添加控制選項

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

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

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

JSP通用分頁框架

<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”,這樣就會沒問題了.

JSP通用分頁框架

七.總結

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


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人福利视频在线观看 | 男女亲热网站 | 亚洲成人高清在线观看 | 日本精品中文字幕 | 在线a亚洲视频播放在线观看 | 久久人操| 成人免费网站在线观看视频 | 亚洲视频在线观看免费视频 | 亚洲极色 | 久久久av亚洲男天堂 | 一级做a爱片久久毛片a高清 | 久久亚洲线观看视频 | 一区二区三高清 | 激情久久一区二区 | 欧美亚洲免费 | 成人毛片100部 | 91精品国产刺激国语对白 | 91精品国产乱码久久久久 | 久久精品欧美一区二区 | 欧美日韩中文字幕在线视频 | 免费久久久久 | 综合在线一区 | 2019亚洲日韩新视频 | 中文字幕偷拍 | 在线播放污 | 国产午夜精品一区二区三区视频 | 国产中文99视频在线观看 | 日韩毛片免费观看 | 国av在线| 国产精品99久久久久久久女警 | 色综合视频网 | 国产午夜精品一区二区三区四区 | 91午夜视频 | 日本精品视频一区二区三区四区 | 欧产日产国产精品99 | 亚洲自拍第一 | 欧美不卡三区 | 精品国产一区二区三区久久久蜜 | 日韩黄色片免费看 | 国产精品久久久网站 | 亚洲成人中文字幕在线 |