博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通用分页2
阅读量:3960 次
发布时间:2019-05-24

本文共 7132 字,大约阅读时间需要 23 分钟。

理解分页核心思想改造pagebean

之前写的通用分页1描述了

1.对通用分页的后台代码进行封装
2.简化后台代码
通用分页2目标
1.前台代码进行封装
2.页面的形式展现出来
Web包

package com.zxp.web;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.zxp.dao.BookDao;import com.zxp.entity.Book;import com.zxp.util.PageBean;public class BookServlet extends HttpServlet{		private static final long serialVersionUID = -5139794703066837744L;	private BookDao bookDao=new BookDao();	@Override	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {		doPost(req, resp);	}	@Override	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//		查询数据库		String bname=req.getParameter("bname");//传数据名		Book book = new Book();		book.setBname(bname);		PageBean pageBean=new PageBean();		try {			List
list = bookDao.list(book, pageBean); req.setAttribute("bookList", list); req.getRequestDispatcher("/bookList.jsp").forward(req, resp); } catch (Exception e) { e.printStackTrace(); } }}

Web.xml

T_pagebean
encodingFiter
com.zxp.util.EncodingFiter
encodingFiter
/*
bookServlet
com.zxp.web.BookServlet
bookServlet
/bookServlet

Jsp代码

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
小说

小说目录

书名:
编号 名称 价格
${b.bid } ${b.bname } ${b.price }
每页N条,共N条,第N页,共N页  
首页  
上一页  
下一页  
尾页  
  
Go

无分页页面展示

在这里插入图片描述
思维导图
在这里插入图片描述
通用分页核心思路
将上一次查询请求再发一次,只不过页码变了
详细思路:
对pagebean增强(添加url、paramMap属性,添加初始化pagebean的方法、最大页、上一页、下一页方法)

package com.zxp.util;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;/** * 分页工具类 * */public class PageBean {	private int page = 1;// 页码	private int rows = 10;// 页大小	private int total = 0;// 总记录数	// 保留上一的请求地址	private String url;	// 保留上一次请求所携带的参数	private Map
paMap = new HashMap<>(); /** * pageBean初始化方法 * * @param req */ public void setRequest(HttpServletRequest req) { // 保存上一次请求所携带的参数 this.setPaMap(req.getParameterMap()); this.setUrl(req.getRequestURI().toString()); // 在jsp页面来控制是否分页 this.setPagination(req.getParameter("pagination")); // 在jsp页面 控制一页展示多少条 this.setRows(req.getParameter("rows")); this.setPage(req.getParameter("page")); } public void setPagination(String pagination) { if ("false".equals(pagination)) { this.setPagination(false); } } public void setRows(String rows) { if (StringUtils.isNotBlank(rows)) { this.setRows(Integer.valueOf(rows)); } } public void setPage(String page) { if (StringUtils.isNotBlank(page)) { this.setPage(Integer.valueOf(page)); } } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Map
getPaMap() { return paMap; } public void setPaMap(Map
paMap) { this.paMap = paMap; } private boolean pagination = true;// 是否分页 public PageBean() { super(); } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getRows() { return rows; } public void setRows(int rows) { this.rows = rows; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public void setTotal(String total) { this.total = Integer.parseInt(total); } public boolean isPagination() { return pagination; } public void setPagination(boolean pagination) { this.pagination = pagination; } /** * 获得起始记录的下标 * * @return */ public int getStartIndex() { return (this.page - 1) * this.rows; } @Override public String toString() { return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]"; } /** * 最大页码 * * @return */ public int getMaxPage() { return this.total % this.rows == 0 ? this.total / this.rows : this.total / this.rows + 1; } /** * 获取下一页 * * @return */ public int getNextPage() { return this.page < this.getMaxPage() ? this.page + 1 : this.page; } /** * 获取上一页 * * @return */ public int getPreviousPage() { return this.page > 1 ? this.page - 1 : this.page; }

封装分页标签

自定义page分页标签(助手类、tld、jsp引用标签库)
将按钮条写入标签助手类
将隐藏的form表单写入标签助手类
将对应的js代码写入标签助手类

package com.zxp.tag;import java.io.IOException;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.BodyTagSupport;import com.zxp.util.PageBean;public class PageTag extends BodyTagSupport{	 private static final long serialVersionUID = 1L;	 private PageBean pageBean;	 @Override	 public int doStartTag() throws JspException {	  JspWriter out = pageContext.getOut();	  try {	   out.write(toHTML());	  } catch (IOException e) {	   e.printStackTrace();	  }	  return super.doStartTag();	 }	 public String toHTML() {	  StringBuffer sb = new StringBuffer();	  //下一次请求提交到后台的表单html代码拼接	  sb.append("
"); sb.append("
"); Map
paMap = pageBean.getPaMap(); if(paMap != null && paMap.size()>0) { for(Entry
entrySet : paMap.entrySet()){ if(!"page".equals(entrySet.getKey())) { for(String val:entrySet.getValue()) { sb.append("
"); } } } } sb.append("
"); sb.append(""); //分页html代码拼接 sb.append("
"); sb.append(" 每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页  
首页  
上一页  
下一页  
尾页  
  
Go"); sb.append("
"); //分页所需要调用的js代码 sb.append("
"); return sb.toString(); } public PageBean getPageBean() { return pageBean; } public void setPageBean(PageBean pageBean) { this.pageBean = pageBean; } }

tld

zxp 1.1 core library
zxp core
1.1
c
/zxp
page
com.zxp.tag.PageTag
JSP
pageBean
true
true

Jsp代码

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>    <%@taglib prefix="z" uri="/zxp" %>    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
小说

小说目录

书名:
编号 名称 价格
${b.bid } ${b.bname } ${b.price }

测试通用分页是否完善

结果

不带条件的搜索

在这里插入图片描述
带条件的 (搜索斗破)
在这里插入图片描述
分页效果点击尾页
在这里插入图片描述
上一页
在这里插入图片描述
下一页
在这里插入图片描述
跳页
在这里插入图片描述

转载地址:http://syrzi.baihongyu.com/

你可能感兴趣的文章
rsync
查看>>
makefile
查看>>
linux 文件权限
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>
inode
查看>>
Shell: sh,bash,csh,tcsh等shell的区别
查看>>
golang ubuntu 配置 笔记
查看>>
vim 常用命令
查看>>
golang 开源项目
查看>>
ubntu 开发服务进程
查看>>
linux 常用命令以及技巧
查看>>
记录1年免费亚马逊AWS云服务器申请方法过程及使用技巧
查看>>
golang文章
查看>>