注:本章内容都是在上一篇文章 通用分页后台显示:https://www.cnblogs.com/ly-0919/p/11058942.html  的基础上进行改进,所以有许多的类都在上一篇,

带来不便请谅解!!!

通用分页的核心

.将上一次查询请求再发一次,只不过改变了页码。

本章重点:

1、改造上次PageBean里 的内容;

2、页面展示

3、创建控制层  servlet

4、自定义分页标签

5、助手类信息

1、补全后的PageBean:

package com.yuan.util;

import java.util.HashMap;

import java.util.Map;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;/**

* 分页工具类

**/

public classPageBean {private int page = 1;//页码

private int rows = 10;//页大小

private int total = 0;//总记录数

private boolean pagination = true;//是否分页

private Map paMap = new HashMap<>();privateString url;public voidsetRequest(HttpServletRequest req) {

Map parameterMap =req.getParameterMap();

StringBuffer url=req.getRequestURL();//保存上一次请求所携带的参数

this.setPaMap(req.getParameterMap());this.setUrl(req.getRequestURL().toString());//在jsp页面来控制是否分页//this.setPagination(req.getParameter("pagination"));//在jsp页面控制一页展示多少条信息//this.setRows(req.getParameter("rows"));

this.setPage(req.getParameter("page"));

}//setPage重载

private voidsetPage(String page) {this.page = StringUtils.isNotBlank(page) ? Integer.valueOf(page):this.page;

}//setPagination重载

public voidsetPagination(String pagination) {this.pagination = StringUtils.isNotBlank(pagination) ? !"false".equals(pagination):this.pagination;

}//setRows重载

public voidsetRows(String rows) {this.rows = StringUtils.isNotBlank(rows)?Integer.valueOf(rows):this.rows;

}public MapgetPaMap() {returnpaMap;

}public void setPaMap(MappaMap) {this.paMap =paMap;

}publicString getUrl() {returnurl;

}public voidsetUrl(String url) {this.url =url;

}publicPageBean() {

super();

}public intgetPage() {returnpage;

}public void setPage(intpage) {this.page =page;

}public intgetRows() {returnrows;

}public void setRows(introws) {this.rows =rows;

}public intgetTotal() {returntotal;

}public void setTotal(inttotal) {this.total =total;

}public voidsetTotal(String total) {this.total =Integer.parseInt(total);

}publicboolean isPagination() {returnpagination;

}public voidsetPagination(boolean pagination) {this.pagination =pagination;

}/**

* 获得起始记录的下标

*

* @return*/

public intgetStartIndex() {return (this.page - 1) * this.rows;

}

@OverridepublicString toString() {return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";

}/**

* 获取最大页码数

* @return*/

public intgetMaxPage() {return this.total % this.rows == 0 ? this.total / this.rows : this.total / this.rows+1;

}/**

* 下一页

* @return*/

public intgetNexPage() {return this.page < this.getMaxPage() ? this.page+1 : this.page;

}/**

* 上一页

* @return*/

public intgetPreviousPage() {return this.page > 1 ? this.page-1 : this.page;

}

}

2、jsp页面展示,分页代码插入到了控制层的Servlet里面

Insert title here

小说目录

书名:

编号 名称 价格
${s.bid } ${s.bname } ${s.price}

3、创建控制层Servlet

packagecom.web;importjava.io.IOException;importjava.sql.SQLException;importjava.util.List;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.yuan.dao.BookDao;importcom.yuan.entity.Book;importcom.yuan.util.PageBean;public class BookServlet extendsHttpServlet {/****/

private static final long serialVersionUID = 1L;private BookDao bookDao = newBookDao();

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

doPost(req, resp);

}

@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

String bname= req.getParameter("bname");

Book book= newBook();

book.setBname(bname);//

PageBean bean = newPageBean();try{

bean.setRequest(req);

List list = this.bookDao.list(book,bean);

req.setAttribute("bookList", list);

req.setAttribute("pageBean", bean);

req.getRequestDispatcher("/BookList.jsp").forward(req, resp);

}catch (InstantiationException | IllegalAccessException |SQLException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

附:web.xml文件配置

Test_pagebean

bookServlet

com.web.BookServlet

bookServlet

/bookServlet.action

4、自定义分页标签

packagecom.tag;importjava.io.IOException;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;importjavax.servlet.jsp.JspException;importjavax.servlet.jsp.JspWriter;importjavax.servlet.jsp.tagext.BodyTagSupport;importcom.yuan.util.PageBean;public class PageTag extendsBodyTagSupport {/****/

private static final long serialVersionUID = 1L;privatePageBean pageBean;publicPageBean getPageBean() {returnpageBean;

}public voidsetPageBean(PageBean pageBean) {this.pageBean =pageBean;

}

@Overridepublic int doStartTag() throwsJspException {

JspWriter out=pageContext.getOut();try{

out.print(toHTML());

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}return super.doStartTag();

}privateString toHTML() {

StringBuilder sb= newStringBuilder();//拼接下一次发送请求所要提交的隐藏的form表单

sb.append("

");

sb.append("");

Map paMap =pageBean.getPaMap();if(paMap != null && paMap.size()>0) {

Set> entrySet =paMap.entrySet();for (Entryentry : entrySet) {//上一次请求可能携带页码name=page的参数,但是改参数在前面已经单独赋值,//因为上一次请求是第一页的数据,下一次可能是第二页,一位这前后请求page对应的值是不一样的,需要单独赋值

if(!"page".equals(entry.getKey())) {for(String val:entry.getValue()) {

sb.append("");

}

}

}

}

sb.append("

");//拼接分页条

sb.append("

");

sb.append("每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页

sb.append(" href='javascript:gotoPage(1)'>首页

sb.append(" href='javascript:gotoPage("+pageBean.getPreviousPage()+")'>上一页

sb.append(" href='javascript:gotoPage("+pageBean.getNexPage()+")'>下一页

sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页

sb.append(" id='skipPage'");

sb.append(" style='text-align: center; font-size: 12px; width: 50px;'>

sb.append(" href='javascript:skipPage()'>Go

");

sb.append("

");//拼接分页所需要的js代码

sb.append("

sb.append(" function gotoPage(page) {");

sb.append(" document.getElementById('pageBeanForm').page.value = page;");

sb.append(" document.getElementById('pageBeanForm').submit();");

sb.append(" }");

sb.append(" function skipPage() {");

sb.append(" var page = document.getElementById('skipPage').value;");

sb.append(" if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pageBean.getMaxPage()+"){");

sb.append(" alert('请输入1~N的数字');");

sb.append(" return;");

sb.append(" }");

sb.append(" gotoPage(page);");

sb.append(" }");

sb.append(" ");returnsb.toString();

}

}

.注意在append拼接时需要注意空格

将自定义标签的类配到tld文件中

/p>

PUBLIC"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

1.0

1.2

test

/zking

Page //标签库中的标签名

com.tag.PageTag//标签的助手类全路径名

JSP

pageBean//标签属性名 在配置的时候必须与助手类的属性一致

true//该属性是否必填

true//是否支持表达式(EL)

5、助手类信息

StringUtils :

packagecom.yuan.util;public classStringUtils {//私有的构造方法,保护此类不能在外部实例化

privateStringUtils() {

}/*** 如果字符串等于null或去空格后等于"",则返回true,否则返回false

*

*@params

*@return

*/

public static booleanisBlank(String s) {boolean b = false;if (null == s || s.trim().equals("")) {

b= true;

}returnb;

}/*** 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false

*

*@params

*@return

*/

public static booleanisNotBlank(String s) {return !isBlank(s);

}

}

EncodingFiter :

packagecom.yuan.util;importjava.io.IOException;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/*** 中文乱码处理

**/@WebFilter(urlPatterns=("/*"))public class EncodingFiter implementsFilter {private String encoding = "UTF-8";//默认字符集

publicEncodingFiter() {super();

}public voiddestroy() {

}public voiddoFilter(ServletRequest request, ServletResponse response,

FilterChain chain)throwsIOException, ServletException {

HttpServletRequest req=(HttpServletRequest) request;

HttpServletResponse res=(HttpServletResponse) response;//中文处理必须放到 chain.doFilter(request, response)方法前面

res.setContentType("text/html;charset=" + this.encoding);if (req.getMethod().equalsIgnoreCase("post")) {

req.setCharacterEncoding(this.encoding);

}else{

Map map= req.getParameterMap();//保存所有参数名=参数值(数组)的Map集合

Set set = map.keySet();//取出所有参数名

Iterator it =set.iterator();while(it.hasNext()) {

String name=(String) it.next();

String[] values= (String[]) map.get(name);//取出参数值[注:参数值为一个数组]

for (int i = 0; i < values.length; i++) {

values[i]= new String(values[i].getBytes("ISO-8859-1"),this.encoding);

}

}

}

chain.doFilter(request, response);

}public void init(FilterConfig filterConfig) throwsServletException {

String s= filterConfig.getInitParameter("encoding");//读取web.xml文件中配置的字符集

if (null != s && !s.trim().equals("")) {this.encoding =s.trim();

}

}

}

jsp页面显示(首页):

下一页:

尾页:

上一页:

跳转:

如需要对另一个数据库表的信息进行分页,需修改dao层查询的语句,新建实体类;还有就是新建一个servlet和jsp页面。

完善上一篇后台显示对比的另一个实体类;

新建servlet和jsp页面。

jsp页面代码:

Insert title here

小说目录

书名:

编号 名称
${s.id } ${s.bookName }

控制层Servlet:

packagecom.web;importjava.io.IOException;importjava.sql.SQLException;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.yuan.dao.BlogDao;importcom.yuan.entity.Bookxyj;importcom.yuan.util.PageBean;

@WebServlet("/BlogServlet")public class BlogServlet extendsHttpServlet {/****/

private static final long serialVersionUID = 1L;private BlogDao blogDao = newBlogDao();

@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

doPost(req, resp);

}

@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

Bookxyj xyj= newBookxyj();

xyj.setBookName(req.getParameter("bookName"));

PageBean pageBean= newPageBean();try{

pageBean.setRequest(req);

List list = this.blogDao.list(xyj, pageBean);

req.setAttribute("blogList", list);

req.setAttribute("pageBean", pageBean);

req.getRequestDispatcher("/blogList.jsp").forward(req, resp);

}catch (InstantiationException | IllegalAccessException |SQLException e) {

e.printStackTrace();

}super.doPost(req, resp);

}

}

谢谢观看!!!上一篇地址  https://www.cnblogs.com/ly-0919/p/11058942.html

java页面分页显示代码_通用分页jsp页面显示相关推荐

  1. java里的文件显示繁体_关于在JSP页面上同时显示简体和繁体的问题(字符编码)...

    编写过JSP页面的朋友大概对于中文乱码问题已经是司空见惯了,网上对于这方面问题的解决办法也很多,在此我就不多赘述了. 但是最近我遇到了一个问题,就是我编写过的页面,有时候会显示繁体字:而这个是通常的G ...

  2. 最佳页面置换算法代码_(存储管理)页面置换算法

    1. 最佳(OPT,Optimal) 所选择的被换出的页面将是永久或者是最长时间内不再被访问,通常可以保证获得最低的缺页率.是一种理论上的算法,因为无法知道一个页面多长时间不再被访问.所以常用于评价其 ...

  3. java通用分页条件查询_通用分页查询

    packagecom.dao;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;import ...

  4. vs中列表分页符代码_电脑办公技巧Excel中Ctrl+K的使用技巧(十二)/Word2016中快速删除分页符与空白页的方法...

    ctrl+k是超链接的快捷键,你可以批量创建超链接,学会使用这个方法你可以快速在文件之间快速跳跃了,无比方便快捷,感兴趣的小伙伴一起看下去吧! 1.在Excel中打开另一个Excel文件(其他类型文件 ...

  5. java实现语法高亮插件_通用代码高亮插件(SyntaxHighlighter)

    写这篇博文的起源是我想把自己的博客弄的更加美观,相信你也一样. 首先,我要说SyntaxHighlighter插件的实现方式及应用示例,然后再说明如何将其应用到自己的博客,使博客的代码着色更加美观. ...

  6. java怎么设置404界面_如何使用Spring MVC显示自定义的404 Not Found页面

    本篇文章给大家带来的内容是关于如何使用Spring MVC显示自定义的404 Not Found页面,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 不知道大家对千篇一律的404 No ...

  7. h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面

    当前,H5页面已成为各大品牌及新闻媒体普遍采取的表现形式,它可以通过优质的内容.新颖的创意向用户推广产品.传播信息,并利用互联网的快速性,短时间内达到很高的浏览量和识别度.相较于H5而言,海报或视频设 ...

  8. SpringSSM的教师管理系统--ajax版本,分页,图片上传,jsp页面使用bootstrap布局

    项目的结构 maven的配置 pom.xml 文件 ](maven的配置 pom.xml 文件) <project xmlns="http://maven.apache.org/POM ...

  9. wpf时间显示代码_如何在ASP.NET和WPF中显示QR代码

    wpf时间显示代码 I've half-jokingly said that there's never a good reason to use a QR Code. However, I'm wo ...

最新文章

  1. 2022-2028年中国电梯行业市场调查及前瞻分析报告
  2. vc++图像保存,重绘
  3. python 内部函数传参_python中函数传参详解
  4. postman调用webservice接口_【分享】关于接口对前后端和测试的意义
  5. 代码编译突然变缓慢问题解决办法(codeblock)
  6. Nacos深入浅出(三)
  7. 有趣的计算机黑科技,6个让你欲罢不能的电脑黑科技软件,我一定要分享出来!...
  8. F450无人机组装与调试
  9. html上绘制网格线,【玩转D3.js】--(1)绘制网格线
  10. 使用饭碗警告实现简单的用户反馈通知
  11. 一个男朋友写给女朋友的信!爆笑(真勇敢)
  12. 计算机名词解释(计算机科学导论)
  13. AI趋势下,小布助手的进化论
  14. ffmpeg视频特效
  15. 微信公众平台开发案例
  16. Java编程:浅析泛型类型中的桥接方法
  17. RapidMiner 离散/缺失
  18. CRM代表什么?需要CRM软件的7个理由
  19. Linux下调试1588单步时间戳报文
  20. 【野蛮生长】2021成长目标

热门文章

  1. Matlab Tricks(十三)—— 提取矩阵的对角线元素
  2. Linux 内核的壳 —— shell
  3. 机器学习基础(三十二) —— 使用 Apriori 算法进行关联分析
  4. SQOOP——MySQL 和 HDFS 的桥梁
  5. C++中的萃取机制(traits)
  6. 机器学习常用数学公式
  7. Android WebView重定向问题,Android Webview重定向问题解决方法
  8. python编程例子-几个Python小案例,爱上Python编程!
  9. arcgis python 教程-按区域消除--arcgis python实例教程
  10. 如何系统的自学python-自学Python应该如何正确系统学习,避免少走弯路