关于此文
bootstrap是前端很流行的框架,正在开发的项目,用bootstrap搭建起来的页面,自我感觉很完美,终于告别了苍白无力的白花花的难看的……的页面了。哈哈。
现在遇到了bootstrap的分页与Java后台结合起来的分页封装问题,对于我这个Java菜鸟来说,包装分页还没玩过。故此,在网上找了这个。觉得很不错,所以决定记录到博客里面。
还没有实践,决定写完博客去实践。在上图。祝我成功吧!
此人的博客没找到,代码中有email地址。
pagination
定义了分页常用的属性,方法
package com.app.pagination; import java.util.List; /** * 通用分页接口 * @author: super.wwz@hotmail.com * @ClassName: Pagination * @Version: v0.1 * @param <T> */ public interface Pagination<T> { /** * 判断是否是首页 * @return */ boolean isFirst(); /** * 判断是否是尾页 * @return */ boolean isLast(); /** * 判断是否有上一页 * @return */ boolean isPrevious(); /** * 判断是否有下一页 * @return */ boolean isNext(); /** * 获取上一页的页码 * @return */ int getPreviousIndex(); /** * 获取下一页的页码 * @return */ int getNextIndex(); /** * 获取当前页码 * @return */ int getPageIndex(); /** * 获取当前页大小 * @return */ int getPageSize(); /** * 获取总页数 * @return */ int getTotalPages(); /** * 获取数据总行数 * @return */ int getTotalElements(); /** * 获取当前页的数据 * @return */ List<T> getCurrData(); /** * 获取数字分页链接对象 * @return */ BetweenIndex getBetweenIndex(); /** * 获取每页显示的分页链接数 * @return */ int getPageLinkNumber(); /** * 设置每页的分页链接数量 * @param pageLinkNumber */ void setPageLinkNumber(int pageLinkNumber); }
BetweenIndex
该接口负责获取分页链接的开始和结尾索引
package com.app.pagination; /** * 开始链接-结束链接 * @author: super.wwz@hotmail.com * @ClassName: BetweenIndex * @Version: v0.1 */ public interface BetweenIndex { /** * 获取开始分页链接索引 * @return */ int getBeginIndex(); /** * 获取结束分页链接索引 * @return */ int getEndIndex(); }
DefaultPagination
Pagination接口的默认实现类
package com.app.pagination.impl; import java.util.List; import com.app.pagination.BetweenIndex; import com.app.pagination.Pagination; /** * Pagination接口默认实现 * @author: super.wwz@hotmail.com * @ClassName: DefaultPagination * @Version: v0.1 * @param <T> */ public class DefaultPagination<T> implements Pagination<T> { private int totalElements; private int pageSize; private int totalPages; private int pageIndex; private QueryHandler<T> queryHandler; private List<T> currData; private int pageLinkNumber; public DefaultPagination(int pageIndex, int pageSize, QueryHandler<T> queryHandler, int pageLinkNumber) { this(pageIndex, pageSize, queryHandler); setPageLinkNumber(pageLinkNumber); } public DefaultPagination(int pageIndex, int pageSize, QueryHandler<T> queryHandler){ //初始化数据访问回调接口 this.queryHandler = queryHandler; //查询总行数 setTotalElements(); //修正页大小 setPageSize(pageSize); //计算总页数: setTotalPages(); //修正页码 setPageIndex(pageIndex); //查询当前页数据 setCurrData(); } private void setCurrData() { // TODO Auto-generated method stub this.currData = queryHandler.getCurrData(pageIndex, pageSize); } private void setPageIndex(int pageIndex) { // TODO Auto-generated method stub if(pageIndex < 1) { this.pageIndex = 1; } else if(pageIndex > totalPages) { this.pageIndex = totalPages; } else { this.pageIndex = pageIndex; } } private void setTotalPages() { // TODO Auto-generated method stub if(pageSize > 0) { /*//普通算法: this.totalPages = totalElements % pageSize == 0 "htmlcode">package com.app.pagination.impl; import java.util.List; /** * 分页查询回调接口 * @author: super.wwz@hotmail.com * @ClassName: QueryHandler * @Version: v0.1 * @param <T> */ public interface QueryHandler<T> { /** * 获取数据总行数 * @return */ int getTotalElements(); /** * 获取当前页的数据 * @param pageIndex * @param pageSize * @return */ List<T> getCurrData(int pageIndex, int pageSize); }BookDaoImpl
BookDao的实现类(BookDao接口已经省略)
package com.app.dao.impl; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import com.app.bean.Book; import com.app.dao.BaseDao; import com.app.dao.BookDao; public class BookDaoImpl extends BaseDao implements BookDao { @Override public int count() { // 查询数据总行数 String sql = "select count(1) from t_book"; try { return getQueryRunner().query(sql, new ScalarHandler<Integer>()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 0; } @Override public List<Book> getBooks(int pageIndex, int pageSize) { // 关于SQLServer的查询分页sql StringBuffer sql = new StringBuffer(); sql.append("select * from ("); sql.append(" select row_number() over(order by(id)) new_id,* from t_book"); sql.append(") t where new_id between "); try { return getQueryRunner().query(sql.toString(), new BeanListHandler<Book>(Book.class), pageSize * (pageIndex - 1) + 1,pageSize * pageIndex); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }BookServiceImpl
BookService业务逻辑接口的实现类 (BookService已经省略)
package com.app.service.impl; import java.util.List; import com.app.bean.Book; import com.app.dao.BookDao; import com.app.dao.impl.BookDaoImpl; import com.app.pagination.Pagination; import com.app.pagination.impl.DefaultPagination; import com.app.pagination.impl.QueryHandler; import com.app.service.BookService; /** * 业务逻辑层查询分页数据示例 * @author: super.wwz@hotmail.com * @ClassName: BookServiceImpl * @Version: v0.1 */ public class BookServiceImpl implements BookService { private BookDao bookDao = new BookDaoImpl(); @Override public Pagination<Book> getBookList(int pageIndex, int pageSize,int pageLinkNumber) { // TODO Auto-generated method stub return new DefaultPagination<Book>(pageIndex, pageSize, new QueryHandler<Book>() { @Override public int getTotalElements() { // TODO Auto-generated method stub return bookDao.count(); } @Override public List<Book> getCurrData(int pageIndex, int pageSize) { // TODO Auto-generated method stub return bookDao.getBooks(pageIndex, pageSize); } },pageLinkNumber); } }BookAction
有关图书的Servlet控制器
package com.app.web.action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.app.bean.Book; import com.app.pagination.Pagination; import com.app.service.BookService; import com.app.service.impl.BookServiceImpl; public class BookAction extends HttpServlet { private static final long serialVersionUID = 5275929408058702210L; private BookService bookService = new BookServiceImpl(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); int pageIndex = 1; int pageSize = 10; try { pageIndex = Integer.parseInt(request.getParameter("pageIndex")); pageSize = Integer.parseInt(request.getParameter("pageSize")); } catch (NumberFormatException e) { e.printStackTrace(); } //6: 显示的分页链接个数 Pagination<Book> bookPagination = bookService.getBookList(pageIndex, pageSize,6); request.setAttribute("bookPagination", bookPagination); request.getRequestDispatcher("index.jsp").forward(request, response); } }Jsp
index.jsp
将Pagiation应用到bootstrap上的简单示例bootstrap版本: 3.3.5<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:if test="${requestScope.bookPagination == null }"> <c:redirect url="bookAction"></c:redirect> </c:if> <!DOCTYPE html"> <html> <head> <title>图书信息列表</title> <!-- Bootstrap v3.3.5 --> <link href="${pageContext.request.contextPath}/bootstrap-3.3.5-dist/css/bootstrap.min.css" type="text/css" rel="stylesheet" charset="utf-8" /> <link id="bootstrapTheme" href="${pageContext.request.contextPath}/bootstrap-3.3.5-dist/css/bootstrap-theme.min.css" type="text/css" rel="stylesheet" charset="utf-8" /> <script src="/UploadFiles/2021-04-02/jquery.min.js">实例数据
说明:
- 如果需要扩展分页功能, 请扩展Pagiation接口以及其余实现类;
- 此外, 此分页不依赖任何数据库(重新实现QueryHandler查询回调接口即可), 可适用于任何web项目中;
使用List 集合模拟数据库的使用示例:
package com.app.service.impl; import java.util.ArrayList; import java.util.List; import com.app.bean.Book; import com.app.pagination.Pagination; import com.app.pagination.impl.DefaultPagination; import com.app.service.BookService; /** * 使用List<T>集合模拟数据库 * @author: super.wwz@hotmail.com * @ClassName: BookServiceImpl2 * @Version: v0.1 */ public class BookServiceImpl2 implements BookService { // private BookDao bookDao = new BookDaoImpl(); private static List<Book> list = new ArrayList<Book>(); //初始化List<Book>数据 static { list.add(new Book(1, "书名1", 18)); list.add(new Book(2, "书名2", 13)); list.add(new Book(3, "书名3", 18)); list.add(new Book(4, "书名4", 38)); list.add(new Book(5, "书名5", 18)); list.add(new Book(6, "书名6", 58)); list.add(new Book(7, "书名7", 12)); list.add(new Book(8, "书名8", 11)); list.add(new Book(9, "书名9", 13)); list.add(new Book(10, "书名10", 22)); list.add(new Book(11, "书名11", 19)); list.add(new Book(12, "书名12", 13)); list.add(new Book(13, "书名13", 19)); list.add(new Book(14, "书名14", 32)); } @Override public Pagination<Book> getBookList(int pageIndex, int pageSize, int pageLinkNumber) { return new DefaultPagination<Book>(pageIndex, pageSize, new QueryHandler<Book>() { @Override public int getTotalElements() { //return bookDao.count(); return list.size(); } @Override public List<Book> getCurrData(int pageIndex, int pageSize) { //return bookDao.list(pageIndex, pageSize); int fromIndex = (pageIndex - 1) * pageSize; int endIndex = fromIndex + pageSize; endIndex = endIndex > list.size() ? list.size() : endIndex; return list.subList(fromIndex, endIndex); } }, pageLinkNumber); } }下一篇更精彩!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“Bootstrap和Java分页实例第一篇”评论...
更新动态
2024年11月18日
2024年11月18日
- 陈洁仪.1994-心痛【立得唱片】【WAV+CUE】
- 车载必备专用超级选曲《劲爆中文DJ》2CD[WAV+CUE]
- 群星《民歌流淌60年(黑胶CD)》2CD[WAV+分轨]
- 群星《美丽时光》紫银合金AQCD[WAV+CUE]
- 群星《12大巨星畅销精选集》[WAV分轨][1.1G]
- 华语排行冠军曲《百事音乐风云榜》[WAV+CUE][1G]
- 奔驰汽车音乐圣经《醇声典范[白金嗓子] 男极声》音乐传真[WAV+CUE][1G]
- 陈影《如影随形HQ》头版限量[低速原抓WAV+CUE]
- 黄乙玲1996-心痛酒来洗[台湾首版][WAV+CUE]
- 曾庆瑜1990-随风而逝[日本东芝1A1首版][WAV+CUE]
- 群星.2015-凭着爱ADMS2CD【华纳】【WAV+CUE】
- 陈冠希.2017-一只猴子3部曲【摩登天空】【WAV+CUE】
- 金元萱.1996-迷迷糊糊【宝丽金】【WAV+CUE】
- 齐秦《燃烧爱情》马来西亚版[WAV+CUE][1G]
- 动力火车《结伴》2024最新 [FLAC分轨][1G]