国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
中文字幕日本在线观看| 一本久久精品| 国产在线视频自拍| 热99re久久精品精品免费| 日本黄在线观看| 免费a级毛片在线播放| 国产免费永久在线观看| 超碰在线影院| 国产无遮挡在线视频免费观看| 国产黄在线看| jizz亚洲| 中文字幕在线影院| 国产不卡在线| 黄色av网址在线免费观看| 国产一区二区三区福利| 在线一区二区三区精品| 国产精选一区二区三区不卡催乳| 国产精品久久久久久久久鸭| av在线天天| 91亚洲精选| 国产午夜三区视频在线| 青青草在线播放| 国产卡1卡2卡三卡在线| 在线观看国产福利视频| 久久精品国产亚洲777| 国产wwww| 中文字幕在线免费| 牛牛在线精品视频| 亚洲永久免费网站| 国产高清av在线| 丁香花高清视频完整版在线观看| 精精国产xxxx视频在线动漫| 天天操人人干| 久久久久久国产视频| 性欧美精品xxxx| 精品176二区| 国产对白在线| 91xxx在线观看| 黄色国产网站在线播放| 四虎a级欧美在线观看| 精品51国产黑色丝袜高跟鞋| 国产精品久久久久永久免费看| 国产麻豆精品入口在线观看| 性网站在线看| www.夜夜操| 热99re久久精品这里都是免费| 在线中文字幕视频观看| 91午夜在线| 在线视频观看亚洲| av在线二区| 狠狠狠综合7777久夜色撩人| 欧美性猛交xxxx免费看蜜桃| 在线观看的av| 性色视频在线| 黄网站在线观看高清免费| 欧美亚洲另类在线观看| 好吊日视频在线观看| 开心激情五月婷婷| 国产毛片毛片| 国产精品视频h| 亚洲精品一区中文字幕电影| 日韩a视频在线观看| 浪潮av一区| 国产日韩网站| аⅴ成人天堂中文在线| √天堂8资源中文在线| 国产高清大尺度一区二区不卡| 18av在线视频| www.狠狠| 精品欧美不卡一区二区在线观看| 羞羞视频在线观看免费| 精品资源在线看| 国产高清免费在线播放| 黄色网址在线免费播放| 在线观看国产视频| 国产欧美黑人| 国产麻豆精品入口在线观看| 99爱视频在线观看| 最近中文字幕大全中文字幕免费| 国产福利在线播放麻豆| 超碰在线97国产| 在线视频三级| 国产亚洲依依| 欧美日韩性视频一区二区三区| 国产三区视频在线观看| 人人干在线视频| 国产二区视频| 国产网站观看9久| 欧美性猛交xxxx免费看久久| 国产高清在线| 中文字幕亚洲精品视频| 免费观看v片在线观看| 国产黄大片在线观看画质优化| 男人天堂网在线观看| 影音先锋日韩| 99热99re6国产在线播放| 国产人成精品| 日本中文字幕高清视频| 日本在线观看网站| 天天插天天色| 亚洲精品男人| 波多野结衣久久高清免费| av在线天堂| 久久精品免视着国产成人| 麻豆福利在线观看| 国产在线资源| 天天操天天操天天色天天要| 国产原创在线播放| 福利资源在线久| 激情网站在线| 中文字幕免费在线视频| 国产精品久久久久永久免费看| 国产中文字幕在线播放| www.色五月| 懂色av一区| 国产小视频在线观看| 国产精品久久久高清免费| 国产夫妻视频| 亚洲精品在线播放视频| 久久久久国产精品嫩草影院| 福利视频网站导航| 国产精品欧美色图| 亚洲综合激情六月婷婷在线观看| 麻豆精品视频入口| 国产视频资源| 不卡av免费观看| 国产偷倩在线播放| av亚洲男人天堂| 九九免费视频| 精品视频在线一区二区| 天天插天天射| 国产精品久久人| 免费精品国产自产拍在| 国产第一页在线视频| 青青草免费在线视频| 国产一级粉嫩xxxx| sese一区| 在线午夜视频| 尤物视频在线看| www狠狠操| 精品欧美色视频网站在线观看| 九九热免费视频| 91资源在线观看| 国产麻豆精品高清在线播放| 精品视频一二区| 91福利在线免费| www狠狠操| 在线免费看黄| 国产区在线观看| 国产麻豆一区二区三区精品 | 国产成人综合美国十次| 免费日本黄色| 亚洲夜夜综合| 在线看黄色av| 在线午夜视频| 国产精品入口免费麻豆| 天天操人人干| 国产精品亚洲色图| 国产在线你懂得| 国产中文在线| 国产在线更新| 久久久久久国产视频| 九色精品视频在线观看| 男人天堂亚洲| 国产在线第一页| 国产麻豆视频免费观看| 狠狠干在线视频| 二人午夜免费观看在线视频| 久久香蕉av| 天堂资源在线中文| 国产免费黄视频在线观看| 免费高清av| 国产三级在线免费| 精品国产二区三区| аⅴ成人天堂中文在线| 九九热免费视频| 国产乱在线观看视频| 91xxx在线观看| 国产福利微拍精品一区二区| 精品国产一区二区三区不卡在线 | 欧美性猛交xxxxbbbb| 国产永久免费| 国产九色在线| 国产激情自拍视频| av影视在线看| 国产美女被草| 影音先锋中文字幕在线| 九色福利视频| 精灵使的剑舞无删减版在线观看| 亚洲天堂电影在线观看| 国内自拍视频在线看免费观看| 国产人成在线视频| 免费av不卡在线观看| 国产偷窥洗澡视频| xxxx视频在线| 国产变态拳头交视频一区二区| 日韩a视频在线观看| 国产精品亚洲色图| av在线中文| 精品乱码一区二区三四区视频|