用Servlet与JSP中实现分页查询

Posted AnswerTheQuestion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Servlet与JSP中实现分页查询相关的知识,希望对你有一定的参考价值。

这个题目,总共分4个部分

1.查询总页数,把页码显示在页面上

2.把每页的内容显示在页面上

3.首页,尾页,上一页,下一页

4.下拉列表中的页数,(根据页数变动,选中第几页提交到第几页)

详解如下:(一部分代码在servlet中,一部分代码在JSP中)

Servlet

package com.lianxi;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class WorkServletB
 */
@WebServlet("/WorkServletB")
public class WorkServletB extends HttpServlet {
    //外层定义一个变量(每页显示的数量)
    private final int PageSize=3;   
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.1调用dao类中的方法,查出总页数;
        int PageCount=new WorkDao().select(PageSize);
        //1.2把总页数传到页面,显示
        request.setAttribute("pagecount", PageCount);
        
        
        
        //2.1找出每页显示的内容传给界面,但是当我第一次进入页面时没有选择页码,页码要默认在第一页,所以首先定义一个PageNum,在进行判断!
        int PageNum=1;
        int PageNow=1;//3.2定义当前页是1
        if(request.getParameter("pagenum") != null){
        //2.2如果接收的pagenum不是空的说明我在选择页数,那么就让PageNum=接收过来的值,以为接收过来的是一个字符串所以在这里需要强制转换一下
            PageNum=Integer.parseInt(request.getParameter("pagenum"));
        
        //3.3如果接收的pagenum不是空的说明我在选择页数,那么就让PageNow=接收过来的值,以为接收过来的是一个字符串所以在这里需要强制转换一下
            PageNow=Integer.parseInt(request.getParameter("pagenum"));
        }
        //2.3把每页的内容穿到页面
        ArrayList<Work> list=new WorkDao().select(PageNum, PageSize);
        request.setAttribute("list", list);
        
        
        
        //3.1设置一个上一页和下一页,首先我们要知道他的当前页(PageNow)是什么?还要判断当前页大于1时上一页才可用,当前页小于总页数时下一页才可用
        //3.4三元运算判断        
        int PageS=PageNow>1?PageNow-1:1;
        int PageX=PageNow<PageCount?PageNow+1:PageCount;
        //3.5网页面传值
        request.setAttribute("pages", PageS);
        request.setAttribute("pagex", PageX);
        
        
        
        //4.1设置下拉菜单显示页数,首先把当前页PageNum传到页面去
        request.setAttribute("pagenow", PageNow);
        
        request.getRequestDispatcher("FenYeChaXun.jsp").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

JSP

<%@page import="com.lianxi.Work"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
<form action="WorkServletB" method="post" id="i">
    <table style="background-color: #000; color: #FFF">
        <tr>
            <td>编号</td>
            <td>学号</td>
            <td>单位</td>
            <td>部门</td>
            <td>工龄</td>
            <td>操作</td>
        </tr>
    <%
    ArrayList<Work> list=(ArrayList<Work>)request.getAttribute("list");//接受每页显示的内容
    for(Work w:list){
        //循环输出
    %>
        <tr style="background-color: #FFF; color: #000">
            <td><%=w.getIds() %></td>
            <td><%=w.getInfoCode() %></td>
            <td><%=w.getFirm() %></td>
            <td><%=w.getDepart() %></td>
            <td><%=w.getOrders() %></td>
            <td>操作</td>
        </tr>
    <%    
    }
    int pages=(int)request.getAttribute("pages");//接受上一页数
    int pagex=(int)request.getAttribute("pagex");//接受下一页数
    int pagenow=(int)request.getAttribute("pagenow");//接受当前页码
    %>    
    </table>
    <a href="WorkServletB?pagenum=<%=1 %>">首页</a><!-- 设置一个首页所以它的pagenum必然是1 -->
    <a href="WorkServletB?pagenum=<%=pages %>">上一页</a>
    <%
    int pagecount=(int)request.getAttribute("pagecount");//接受总页数
    for(int i=1;i<=pagecount;i++){
        //利用循环输出页码,并且把a标签地址设置为动态的,点击谁就提交谁的pagenum
    %>    
        <a href="WorkServletB?pagenum=<%=i %>"><%=i %></a>
    <%    
    }
    %>
    <a href="WorkServletB?pagenum=<%=pagex %>">下一页</a>
    <a href="WorkServletB?pagenum=<%=pagecount %>">尾页</a><br><!-- 设置一个尾页所以它的pagenum必然是总页数,所以我们要从servlet中传过一个总页数pagecount来 -->
    <select name="pagenum" onchange="change()"><!-- 状态改变时触发change方法 -->
    <%
    for(int i=1;i<=pagecount;i++){
        //判断一下当前页是不是等于i,如果是当前页就是selected
        if(i==pagenow){
    %>
        <option value="<%=i %>" selected="selected"><%=i %></option>
    <%
        }else{
    %>        
        <option value="<%=i %>"><%=i %></option>    
    <%        
        }
    }
    %>
    </select>
</form>
</body>
<!-- 当我选中下拉列表中的某一项时,自动提交 -->
<script type="text/javascript">
    function change(){
        document.getElementById("i").submit();
    }
</script>
</html>

 

以上是关于用Servlet与JSP中实现分页查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在排名查询中实现分页?

继续在ssh中实现分页排序

java中数据库中实现分页的sql语句要求每页十条要查询的是第二页

使用插件pagehelper在mybatis中实现分页查询

Yii中实现分页

如何在 SQL for MS Access 中实现分页?