jsp——通用分页——2
2019-06-05 02:45
183 查看
文章目录
大家好,在上一篇的博客里,写了通用分页的基本后台代码,这一篇主要写的是前台的代码。
ui类
首先,第一步写的是页面展示:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@taglib uri="/zking" prefix="z" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <jsp:forward page="bookServlet"></jsp:forward> <h2>小说目录</h2> <br> <form action="${pageContext.request.contextPath}/bookServlet.action" method="post"> 书名:<input type="text" name="bname"> <input type="submit" value="确定"> </form> <table border="1" width="100%"> <tr> <td>编号</td> <td>名称</td> <td>价格</td> </tr> <c:forEach items="${bookList }" var="b"> <tr> <td>${b.bid }</td> <td>${b.bname }</td> <td>${b.price }</td> </tr> </c:forEach> </table> </body> </html>
servlet
因为第一次进这页面没有数据,所以得先进web层加载数据。运用的是:
<jsp:forward page=“bookServlet”></jsp:forward> 。
所以现在写加载数据servlet:
package com.wab; 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.dao.bookDao; import com.entity.Book; import com.util.PageBean; public class BookServlet extends HttpServlet { private bookDao bd = 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(); pageBean.setRequest(req); List<Book> list = bd.list(book, pageBean); req.setAttribute("bookList", list); req.setAttribute("pagebean", pageBean); req.getRequestDispatcher("bookList.jsp").forward(req, resp); } }
在servlet里,最重要的就是pagebean,上篇说道,pageBean是控制是否分页的,但在这里,因为在展示页面中,点击下一页,其中的大部分参数是不变的,变动的是page也就是页数,所以我们可以把上一次请求,把他当做参数,传入进去,就可以做到分页。
pageBean
和上篇的pageBean不同的是,在这里多加了两个参数:
url: 存放的是请求的地址,运用的方法是req.getRequestURL() ,这个方法是获取请求全路径。
Map集合:req.getParameterMap()这个方法的作用是,运用传过来的请求获取到这个请求中含有的所有参数。这样就可以获得分页的页数,总数等等。也能获得查询中的关键字查询。
package com.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 boolean pagination = true;// 是否分页 private String url; private Map<String, String[]> paramMap = new HashMap<>(); public void setRequest (HttpServletRequest req) { this.setPage(req.getParameter("page")); this.setRows(req.getParameter("rows")); this.setPagination(req.getParameter("pagination")); //getRequestURL()获取到请求的全路径 this.setUrl(req.getRequestURL().toString()); //getParameterMap()获得url请求所携带的所有参数 this.setParamMap(req.getParameterMap()); } public void setPagination(String pagination) { if(StringUtils.isNotBlank(pagination)) { this.setPagination(!"false".equals(pagination)); } } 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<String, String[]> getParamMap() { return paramMap; } public void setParamMap(Map<String, String[]> paramMap) { this.paramMap = paramMap; } 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() { re 4000 turn this.page > 1 ? this.page-1 : this.page; } }
分页标签
写完这些就可以基本做到分页了。但如果想更加简洁一些,那就只能使用标签来分页了。那如何制作标签呢?很简单:
package com.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.zking.util.PageBean; public class PageTag extends BodyTagSupport { private static final long serialVersionUID = -3609493782238830873L; private PageBean pageBean; public PageBean getPageBean() { return pageBean; } public void setPageBean(PageBean pageBean) { this.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(" <form id='pageBeanForm' action='"+pageBean.getUrl()+"' method='post'> "); Map<String, String[]> map = pageBean.getParamMap(); if(map!=null &&map.size()>0) { for(Entry<String, String[]> entry: map.entrySet()) { if(!"page".equals(entry.getKey())) { for(String val:entry.getValue()) { sb.append(" <input type='hidden' name='"+entry.getKey()+"' value='"+val+"' > "); } } } } sb.append(" <input type='hidden' name='page'> "); sb.append(" </form>"); //分页条代码拼接 sb.append(" <div style='text-align: right; font-size: 12px;'>"); sb.append(" 每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页 <a href='javascript:gotoPage(1)'>首页</a> <a"); sb.append(" href='javascript:gotoPage("+pageBean.getPreviousPage()+")'>上一页</a> <a "); sb.append(" href='javascript:gotoPage("+pageBean.getNextPage()+")'>下一页</a> <a "); sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页</a> <input type='text' "); sb.append(" id='skipPage'"); sb.append(" style='text-align: center; font-size: 12px; width: 50px;'> <a"); sb.append(" href='javascript:skipPage()'>Go</a>"); sb.append(" </div>"); //分页所调用的js代码拼接 sb.append(" <script type='text/javascript'>"); 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(" </script>"); return sb.toString(); } }
基本上只需输入一个pageBean即可,因为里面拥有需要到的所有的参数,和路径还有请求。
在pageBean里面把之前写在展示页面的代码希尔进去,改变参数即可。
相关文章推荐
- jsp通用的分页技术
- 通用数据库jsp分页查询模块
- 利用ajax技术实现通用分页,在jsp页面呈现
- JSP通用分页组件 pager-taglib使用
- 通用数据库jsp分页查询模块
- 又一种JSP实现的Java通用简单分页算法
- JSP实现的Java通用简单分页算法之三
- JSP实现带查询条件的通用分页组件
- JSP通用查询处理与分页显示
- JSP通用查询处理与分页显示
- 适用于Jsp的通用分页程序(示例代码)
- 7、实现通用分页功能三(实现通用分页JSP代码)
- JSP分页技术实现 使用工具类实现通用分页处理
- JSP通用分页框架
- JSP通用分页框架
- 一个通用的JSP分页程序
- JSP通用分页程序(测试版)
- JSP通用分页组件 pager-taglib使用
- JSP的通用分页
- JSP通用分页框架