欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > JSP通用分頁框架

JSP通用分頁框架

熱門標簽:泰州泰興400電話 怎么申請 聊城智能電銷機器人外呼 好操作的電話機器人廠家 企業怎么在聯通申請400電話 百度地圖添加標注圖標樣式 南昌市地圖標注app 如何用中國地圖標注數字點 南京新思維電話機器人 地圖標注市場怎么樣

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

一.分頁類

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

總頁數 totalPage

總共記錄數 totalRecord

每頁顯示數 pageSize

當前頁pageIndex

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

完整代碼:Page.java

import java.util.List;
public class PagerE> {
/**
* 總共頁數
*/
private int totalPages;
/**
* 總共記錄數
*/
private int totalRecords;
/**
* 每頁顯示數量
*/
private int pageSize;
/**
* 當前頁
*/
private int pageIndex;
/**
* 當前頁數據集合
*/
private ListE> 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(ListE> 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 ListE> getDatas() {
return datas;
}
}

二.用戶類

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

用戶號 userId

用戶姓名 username

用戶密碼 password

注冊時間 regdate

完整代碼

import java.sql.Timest
public class User {
private int userId;//用戶id
private 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 ThreadLocalInteger> pageSize = new ThreadLocal>();
//當前頁
private static ThreadLocalInteger> 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;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
try {
pageSize = Integer.parseInt(filterConfig.getInitParameter("pagesize"));
} catch (NumberFormatException e) {
pageSize = 15;
}
}
@Override
public 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();
}
}
@Override
public 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 ?,?";
//存放當前頁的集合
ListUser> datas = new ArrayList>();
//存放當前分頁的集合
PagerUser> 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);
}
//最后設置pages
pages.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();
PagerUser> 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,這樣就會省下很多麻煩

您可能感興趣的文章:
  • JavaScript實現列表分頁功能特效
  • js腳本分頁代碼分享(7種樣式)
  • 純javascript實現分頁(兩種方法)
  • ANGULARJS中使用JQUERY分頁控件
  • JSP+EXt2.0實現分頁的方法
  • JSP實現的簡單分頁示例
  • 使用Jquery+Ajax+Json如何實現分頁顯示附JAVA+JQuery實現異步分頁
  • JSP實現的簡單分頁顯示效果代碼
  • jquery+json實現分頁效果
  • jquery分頁插件jquery.pagination.js使用方法解析
  • jquery分頁插件jquery.pagination.js實現無刷新分頁
  • Angular.js與Bootstrap相結合實現表格分頁代碼
  • js實現ajax分頁完整實例
  • js多功能分頁組件layPage使用方法詳解
  • 基于Vue.js的表格分頁組件
  • 純JS前端實現分頁代碼

標簽:吉林 開封 白銀 山南 銅川 自貢 烏蘭察布 臨汾

巨人網絡通訊聲明:本文標題《JSP通用分頁框架》,本文關鍵詞  JSP,通用,分頁,框架,JSP,通用,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《JSP通用分頁框架》相關的同類信息!
  • 本頁收集關于JSP通用分頁框架的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲av片不卡无码久久| 欧美丰满美乳xxx高潮www| 久久网站热最新地址| 天天综合色天天综合色h| 91影视在线播放| 色呦呦日韩精品| 国产精品国产精品国产专区不片| 国产精品自拍毛片| 亚洲国产精品一区二区久久hs| 久久久一区二区三区| 久久99精品视频| 国产在线观看h| 久久亚洲免费视频| 国产九九视频一区二区三区| 美国黄色特级片| 久久久精品日韩欧美| 国产一区二区三区免费观看| 国产黄色片在线| 日本一区二区三区在线观看| 风间由美一区二区av101| 男人av资源站| 亚洲欧洲av在线| 91蜜桃在线免费视频| 欧美日韩高清一区二区不卡| 午夜精品久久久久影视| av鲁丝一区鲁丝二区鲁丝三区| 91精品国产欧美一区二区18| 免费一区二区视频| 免费黄色片网站| 亚洲国产精品二十页| 成人黄色a**站在线观看| 91精品91久久久中77777| 亚洲国产日韩一区二区| 免费成人蒂法网站| 久久精品无码一区二区三区| 国产 欧美在线| 欧美午夜不卡在线观看免费| 污片在线观看一区二区 | 久久综合av免费| 国产精品一区二区免费不卡| 国产美女福利视频| 一区二区不卡在线视频 午夜欧美不卡在| 久久久男人的天堂| 日韩欧美国产一区二区在线播放| 久久99精品国产.久久久久久| 国产在线免费看| 亚洲精品国产a| 艳妇乳肉亭妇荡乳av| 久久先锋影音av| av在线免费不卡| 欧美一区在线视频| 国产精品亚洲专一区二区三区 | 成人黄色片在线观看| 欧美亚洲一区三区| 免费观看成人av| 99鲁鲁精品一区二区三区| 亚洲精品成人天堂一二三| 国产麻豆xxxvideo实拍| 国产人成一区二区三区影院| 日本成人在线免费观看| 精品日韩欧美在线| 成人成人成人在线视频| 欧美一区二区三区精品| 狠狠久久亚洲欧美| 欧美中文字幕一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 成年人av电影| 美女网站色91| 日本久久电影网| 久久国产麻豆精品| 91久久精品一区二区三区| 男女视频一区二区| 91久久国产综合久久| 狠狠色丁香久久婷婷综| 欧美日韩国产免费一区二区| 国产一区二区毛片| 欧美电影一区二区| 国产成人精品亚洲日本在线桃色| 欧美日韩久久久| 国产成人一区在线| 日韩一区二区三区av| 成人激情av网| 精品88久久久久88久久久| 日本黄色www| 日本一区二区动态图| av网站免费在线播放| 亚洲免费av高清| 黄色av免费播放| 亚洲成精国产精品女| 日本老熟俱乐部h0930| 精品亚洲欧美一区| 欧美男人的天堂一二区| 成人av在线一区二区| 精品88久久久久88久久久| 无码任你躁久久久久久老妇| 亚洲色图色小说| 日日碰狠狠添天天爽| 久久精品国产久精国产爱| 欧美日韩美女一区二区| av电影在线观看完整版一区二区| 久久人人97超碰com| 欲求不满的岳中文字幕| 亚洲一区二区三区四区五区黄| 欧美另类videoxo高潮| 久久99精品国产.久久久久久| 91精品国产入口在线| 蜜桃视频无码区在线观看| 国产精品国产三级国产普通话99 | 日韩欧美在线不卡| 国产精品99精品无码视亚| 最新日韩av在线| 黄色a级片在线观看| 国产一区二区调教| 久久青草欧美一区二区三区| 精品人妻一区二区三区视频| 偷拍与自拍一区| 欧美日本一区二区在线观看| 91天堂素人约啪| 综合激情成人伊人| 紧身裙女教师波多野结衣| 国产福利91精品一区二区三区| 精品精品欲导航| 三级网站在线免费观看| 蜜臀精品一区二区三区在线观看| 日韩一级精品视频在线观看| 亚洲一区二区在线免费| 婷婷久久综合九色综合绿巨人| 精品视频在线视频| 国产伦精品一区二区三区妓女下载 | 日韩欧美中文字幕制服| 欧美 日本 国产| 蜜臀av一区二区| 精品国产制服丝袜高跟| 国产精品毛片一区二区| 麻豆成人av在线| 久久精品一区二区三区不卡牛牛| 国产视频三区四区| 精品一区二区三区欧美| 欧美哺乳videos| 精品人妻一区二区三区四区| 国产精品自拍在线| 亚洲欧洲精品成人久久奇米网| 色妹子一区二区| 中文在线字幕观看| 日韩国产在线一| 亚洲高清在线精品| 91精品久久久久久久99蜜桃| 欧美色倩网站大全免费| 99久久精品一区| 一区二区三区蜜桃| 91精品麻豆日日躁夜夜躁| 国产色视频一区二区三区qq号| 蜜臀av一级做a爰片久久| 国产亚洲综合色| 中日韩一级黄色片| 91免费版在线看| 日韩精品五月天| 久久―日本道色综合久久| 中文字幕五月天| 91视频免费观看| 日本在线不卡视频| 久久久久久久久99精品| 国产大学生自拍| 影音先锋黄色资源| 国产自产v一区二区三区c| 中文在线免费一区三区高中清不卡| 欧美偷拍第一页| 中国特级黄色片| 久久99国产精品麻豆| 国产精品日产欧美久久久久| 欧美色国产精品| 欧美图片第一页| 大尺度一区二区| 亚洲精品日韩综合观看成人91| 9191精品国产综合久久久久久| 欧美图片第一页| 成人av影院在线| 日韩和欧美一区二区| 国产精品情趣视频| 69堂精品视频| 天天色影综合网| 欧美激情 亚洲| 国产在线播放一区二区三区 | 国产一卡二卡三卡四卡| 激情综合色丁香一区二区| 亚洲视频小说图片| 日韩你懂的在线播放| 91插插插插插插| 国产精品久久不卡| 不卡av电影在线播放| 日本成人在线视频网站| 国产精品久久久久精k8| 日韩欧美的一区二区| 色屁屁一区二区| 免费观看a级片| 日本久久久久久久久久| 国产高清一区日本| 日本不卡一区二区| 亚洲免费毛片网站| 国产亚洲精品精华液|