Bootstrap和Java分页实例第一篇

关于此文

  bootstrap是前端很流行的框架,正在开发的项目,用bootstrap搭建起来的页面,自我感觉很完美,终于告别了苍白无力的白花花的难看的……的页面了。哈哈。

现在遇到了bootstrap的分页与Java后台结合起来的分页封装问题,对于我这个Java菜鸟来说,包装分页还没玩过。故此,在网上找了这个。觉得很不错,所以决定记录到博客里面。

还没有实践,决定写完博客去实践。在上图。祝我成功吧!

此人的博客没找到,代码中有email地址。

pagination

定义了分页常用的属性,方法

rush:java;"> package com.app.pagination; import java.util.List; /** * 通用分页接口 * @author: super.wwz@hotmail.com * @ClassName: Pagination * @Version: v0.1 * @param */ public interface Pagination { /** * 判断是否是首页 * @return */ boolean isFirst(); /** * 判断是否是尾页 * @return */ boolean isLast(); /** * 判断是否有上一页 * @return */ boolean isPrevIoUs(); /** * 判断是否有下一页 * @return */ boolean isNext();

/**

/**

  • 获取当前页的数据
  • @return
    */
    List getCurrData();

/**

/**

/**

  • 设置每页的分页链接数量
  • @param pageLinkNumber
    */
    void setPageLinkNumber(int pageLinkNumber);
    }

BetweenIndex

该接口负责获取分页链接的开始和结尾索引

rush:java;"> 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接口的认实现类

    rush:java;"> 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
    /
    public class DefaultPagination implements Pagination {
    private int totalElements;
    private int pageSize;
    private int totalPages;
    private int pageIndex;
    private QueryHandler queryHandler;
    private List currData;
    private int pageLinkNumber;
    public DefaultPagination(int pageIndex,int pageSize,QueryHandler queryHandler,int pageLinkNumber) {
    this(pageIndex,pageSize,queryHandler);
    setPageLinkNumber(pageLinkNumber);
    }
    public DefaultPagination(int pageIndex,QueryHandler 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 ?
    totalElements / pageSize : (totalElements / pageSize) + 1;*/
    //减一公式:
    this.totalPages = (totalElements + pageSize - 1) / pageSize;
    }
    }
    private void setPageSize(int pageSize) {
    // Todo Auto-generated method stub
    if(pageSize < 1) {
    this.pageSize = 1;
    } else if(pageSize > totalElements) {
    this.pageSize = totalElements;
    } else {
    this.pageSize = pageSize;
    }
    }
    private void setTotalElements() {
    // Todo Auto-generated method stub
    this.totalElements = queryHandler.getTotalElements();
    }
    @Override
    public boolean isFirst() {
    // Todo Auto-generated method stub
    return pageIndex == 1;
    }
    @Override
    public boolean isLast() {
    // Todo Auto-generated method stub
    return pageIndex == totalPages;
    }
    @Override
    public boolean isPrevIoUs() {
    // Todo Auto-generated method stub
    return pageIndex > 1;
    }
    @Override
    public boolean isNext() {
    // Todo Auto-generated method stub
    return pageIndex < totalPages;
    }
    @Override
    public int getPrevIoUsIndex() {
    // Todo Auto-generated method stub
    return isPrevIoUs() ? pageIndex - 1 : 1;
    }
    @Override
    public int getNextIndex() {
    // Todo Auto-generated method stub
    return isNext() ? pageIndex + 1 : totalPages;
    }
    @Override
    public int getPageIndex() {
    // Todo Auto-generated method stub
    return pageIndex;
    }
    @Override
    public int getPageSize() {
    // Todo Auto-generated method stub
    return pageSize;
    }
    @Override
    public int getTotalPages() {
    // Todo Auto-generated method stub
    return totalPages;
    }
    @Override
    public int getTotalElements() {
    // Todo Auto-generated method stub
    return totalElements;
    }
    @Override
    public List getCurrData() {
    // Todo Auto-generated method stub
    return currData;
    }
    @Override
    public BetweenIndex getBetweenIndex() {
    // Todo Auto-generated method stub
    return new BetweenIndex() {
    private int beginIndex;
    private int endindex;
    {
    boolean isOdd = pageLinkNumber % 2 == 0;
    int val = pageLinkNumber / 2;
    beginIndex = pageIndex - (isOdd ? val - 1: val);
    endindex = pageIndex + val;
    if(beginIndex < 1) {
    beginIndex = 1;
    endIndex = pageLinkNumber;
    }
    if(endIndex > totalPages) {
    endindex = totalPages;
    beginIndex = endindex - pageLinkNumber + 1;
    }
    }
    @Override
    public int getEndindex() {
    // Todo Auto-generated method stub
    return endindex;
    }
    @Override
    public int getBeginIndex() {
    // Todo Auto-generated method stub
    return beginIndex;
    }
    };
    }
    @Override
    public int getPageLinkNumber() {
    // Todo Auto-generated method stub
    return pageLinkNumber;
    }
    @Override
    public void setPageLinkNumber(int pageLinkNumber) {
    // Todo Auto-generated method stub
    if (pageLinkNumber < 0) {
    this.pageLinkNumber = 0;
    } else if (pageLinkNumber > totalPages) {
    this.pageLinkNumber = totalPages;
    } else {
    this.pageLinkNumber = pageLinkNumber;
    }
    }
    }
     
  • QueryHandler

    用于DefaultPagination实现类的查询回调接口

    rush:java;"> package com.app.pagination.impl; import java.util.List; /**
  • 分页查询回调接口
  • @author: super.wwz@hotmail.com
  • @ClassName: QueryHandler
  • @Version: v0.1
  • @param
    */
    public interface QueryHandler {
    /**
  • 获取数据总行数
  • @return
    */
    int getTotalElements();
  • /**

    • 获取当前页的数据
    • @param pageIndex
    • @param pageSize
    • @return
      */
      List getCurrData(int pageIndex,int pageSize);
      }

    BookDaoImpl

    BookDao的实现类(BookDao接口已经省略)

    rush:java;"> 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()); } catch (sqlException e) { // Todo Auto-generated catch block e.printstacktrace(); } return 0; } @Override public List 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 ? and ?"); try { return getQueryRunner().query(sql.toString(),new BeanListHandler(Book.class),pageSize * (pageIndex - 1) + 1,pageSize * pageIndex); } catch (sqlException e) { // Todo Auto-generated catch block e.printstacktrace(); } return null; } }

    BookServiceImpl

    BookService业务逻辑接口的实现类 (BookService已经省略)

    rush:java;"> 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 getBookList(int pageIndex,int pageLinkNumber) {
    // Todo Auto-generated method stub
    return new DefaultPagination(pageIndex,new QueryHandler() {
    @Override
    public int getTotalElements() {
    // Todo Auto-generated method stub
    return bookDao.count();
    }
    @Override
    public List getCurrData(int pageIndex,int pageSize) {
    // Todo Auto-generated method stub
    return bookDao.getBooks(pageIndex,pageSize);
    }
    },pageLinkNumber);
    }
    }
  • BookAction

    有关图书的Servlet控制器

    rush:java;"> 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 bookPagination = bookService.getBookList(pageIndex,6); request.setAttribute("bookPagination",bookPagination); request.getRequestdispatcher("index.jsp").forward(request,response); } }

    Jsp

    index.jsp 将Pagiation应用到bootstrap上的简单示例bootstrap版本: 3.3.5

    rush:xhtml;"> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> cope.bookPagination == null }"> 图书信息列表
    #cope.bookPagination}">
    图书名 单价 irst}" var="isFirst"> irst}">

    实例数据

    说明:

    • 如果需要扩展分页功能,请扩展Pagiation接口以及其余实现类;
    • 此外,此分页不依赖任何数据库(重新实现QueryHandler查询回调接口即可),可适用于任何web项目中;

    使用List 集合模拟数据库的使用示例:

    <div class="jb51code">
    <pre class="brush:java;">
    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集合模拟数据库
    • @author: super.wwz@hotmail.com
    • @ClassName: BookServiceImpl2
    • @Version: v0.1
      /
      public class BookServiceImpl2 implements BookService {
      // private BookDao bookDao = new BookDaoImpl();
      private static List list = new ArrayList();
      //初始化List数据
      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 getBookList(int pageIndex,int pageLinkNumber) {
      return new DefaultPagination(pageIndex,new QueryHandler() {
      @Override
      public int getTotalElements() {
      //return bookDao.count();
      return list.size();
      }
      @Override
      public List 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);
      }
      }

    下一篇更精彩!

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

    相关文章

    Bootstrip HTML 查询搜索常用格式模版 &lt;form class=&...
    如何在按钮上加红色数字 您可以使用Bootstrap的badge组件来在...
    要让两个按钮左右排列,你可以使用 Bootstrap 的网格系统将它...
    是的,可以将status设置为布尔类型,这样可以在前端使用复选...
    前端工程师一般用的是Bootstrap的框架而不是样式,样式一般自...
    起步导入:<linkrel="stylesheet"href="b...