jsp页面分页显示数据_数据库分页查询

jsp页面分页显示数据_数据库分页查询最近在做一个小程序,用到了JSP的分页

jsp页面分页显示数据_数据库分页查询"

最近在做一个小程序,用到了JSP的分页。虽然只是最简单的分页,但是还是花了我不少时间。这看似简单的功能,实现起来还是稍微有点麻烦。实现分页功能,需要知道数据的总个数,每页应该有多少条数据,以及当前页码。假如总共有300条数据,每页20条,那么应该就有15页;假设有301条数据,每页20条,这时候就需要16页。因此,总页数可以这样计算:总页数=数据总数%每页条数==0?数据总数/每页条数:数据总数/每页条数+1。为了能显示当前页的数据,我们需要知道当前页码,然后根据当前页码计算应该显示哪些数据。因此,我们还需要一个参数来跟踪当前页码。

知道了这些,就可以开始分页的实现了。

简单分页

首先来看看最简单的分页。我们先不考虑数据库如何分页,假设现在我们直接获取到了所有数据,只考虑如何将这些数据分页。

后端代码

首先我们需要一个实体类,其他方法已省略。

public class User { 
   
    private int id;
    private String name;
    private String password;
    private LocalDate birthday;
}

然后需要一个数据访问层的接口:

public interface UserRepository { 
   
    List<User> listAll();
}

然后我们来实现这个接口,作为我们的数据源。

public class MemoryUserRepository implements UserRepository { 
   
    public static final int COUNTS = 302;

    @Override
    public List<User> listAll() { 
   
        List<User> users = new ArrayList<>();
        for (int i = 0; i < COUNTS; ++i) { 
   
            User user = new User();
            user.setId(i + 1);
            user.setName("用户" + i + 1);
            user.setPassword("12345" + i);
            user.setBirthday(LocalDate.now());
            users.add(user);
        }
        return users;
    }
}

然后我们需要一个Servlet,来计算总页数等这些分页相关的变量,然后将分页信息传递给JSP。这个分页非常简单,实际上是利用了List接口的subList方法来切分数据,而这个方法需要接受子列的起始索引和结束索引组成的闭开区间,所以我们需要计算本页起始用户序号和本页末尾用户序号的下一个。如果数据有零头,不够一整页,那么我们就需要判断一下末尾序号是否超过了列表的大小。

@WebServlet(name = "ListAllServlet", urlPatterns = { 
   "/list"})
public class ListAllServlet extends HttpServlet { 
   
    private List<User> users;
    private UserRepository repository;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
   
        String p = req.getParameter("page");
        int page;
        try { 
   
            //当前页数
            page = Integer.valueOf(p);
        } catch (NumberFormatException e) { 
   
            page = 1;
        }
        //用户总数
        int totalUsers = users.size();
        //每页用户数
        int usersPerPage = 20;
        //总页数
        int totalPages = totalUsers % usersPerPage == 0 ? totalUsers / usersPerPage : totalUsers / usersPerPage + 1;
        //本页起始用户序号
        int beginIndex = (page - 1) * usersPerPage;
        //本页末尾用户序号的下一个
        int endIndex = beginIndex + usersPerPage;
        if (endIndex > totalUsers)
            endIndex = totalUsers;
        req.setAttribute("totalUsers", totalUsers);
        req.setAttribute("usersPerPage", usersPerPage);
        req.setAttribute("totalPages", totalPages);
        req.setAttribute("beginIndex", beginIndex);
        req.setAttribute("endIndex", endIndex);
        req.setAttribute("page", page);
        req.setAttribute("users", users);
        req.getRequestDispatcher("list.jsp").forward(req, resp);
    }

    @Override
    public void init() throws ServletException { 
   
        repository = new MemoryUserRepository();
        users = repository.listAll();
    }
}

上面这个Servlet中的list.jsp就是我们具体显示的页面了。下面我们要做的就是处理前端了。

前端代码

分页组件

首先来看看前端如何分页。我在这里用的前端框架是Bootstrap,它也提供了一个分页组件pagination,只需要在页面中添加如下一段代码。

<nav>
  <ul class="pagination">
    <li><a href="#">&laquo;</a></li>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    <li><a href="#">4</a></li>
    <li><a href="#">5</a></li>
    <li><a href="#">&raquo;</a></li>
  </ul>
</nav>

当然,这段代码是静态的,我们要让它产生动态的行为,就需要放到JSP中进行处理。

JSP代码

下面是我的JSP代码。我用了JSTL来做JSP的扩展,因此在项目中还需要添加JSTL的包。为了简洁,我将一些不相关的代码写在了其它JSP中,然后包含进来。_header.jsp是引入Bootstrap的一些代码。_navbar.jsp_footer.jsp则是可选的导航条和页脚,没有也罢。

然后是一堆<c:set>,设置了我们分页要使用的一些变量。currentPageUsers这个变量做了实际的分页工作。

然后,我用了一个表格来显示当前页的数据。用到了JSTL的<c:forEach>标签。

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>简单分页</title>
    <%@include file="_header.jsp" %>
</head>
<body>
<%@include file="_navbar.jsp" %>
<div class="container">

    <c:set var="totalUsers" value="${requestScope.totalUsers}"/>
    <c:set var="usersPerPage" value="${requestScope.usersPerPage}"/>
    <c:set var=

今天的文章jsp页面分页显示数据_数据库分页查询分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/71444.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注