网站首页> 文章专栏> SSM+PageHelper+Bootstrap实现2种方式分页查询【http/ajax】
SSM+PageHelper+Bootstrap实现2种方式分页查询【http/ajax】
路人王 天津 228 0 0

1.搭建好SSM框架,引入PageHelper插件并配置好。【略】

2.EmployeeController.java

@Controller
public class EmployeeController {  
	// 1.【ajax】分页的请求接受
    @RequestMapping(value = "/emps")
    //将对象直接转换为json字符串
    @ResponseBody
    public Msg getEmpsWithJson(@RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {
        //为了分页方便,引入mybatis的pageHelper分页组件

        //1.查询之前,调用pageHelper,默认1页,大小为5
        PageHelper.startPage(pn, 5);

        //2.紧跟着,这就是一个分页查询
        List<Employee> emps = employeeService.getAll();

        //3.pageInfo包装查询出来的数据,只需要将pageinfo交给页面皆可以了
        //封装了详细的分页信息【查询出来的数据】,连续传入显示的5页,页码处于中间位置
        PageInfo page = new PageInfo(emps, 5);
        //不用放入到request域中,直接返回

        return Msg.success().add("pageInfo", page);
    }


    // 2.【http】分页查询员工的数据
    //@RequestMapping(value = "/emps")
    public String getEmps(@RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {

        //为了分页方便,引入mybatis的pageHelper分页组件
        //1.查询之前,调用pageHelper
        PageHelper.startPage(pn, 5);

        //2.这就是一个分页查询
        List<Employee> emps = employeeService.getAll();

        //3.pageInfo包装查询出来的数据,只需要将pageinfo交给页面皆可以了
        //封装了详细的分页信息【查询出来的数据】,连续传入显示的5页
        PageInfo page = new PageInfo(emps, 5);

        //4.把分页所有的信息对象model设置到request域中
        model.addAttribute("pageInfo", page);

        System.out.println("进入到了controller");
        //最后跳转页面
        return "list";
    }
}

2.http请求方式的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" ; charset="UTF-8">
    <title>员工列表</title>

    <%
        pageContext.setAttribute("APP_PATH", request.getContextPath());
    %>
    <%--web路径
     *不以‘/’开始的相对路径,以当前路径为基准
     以‘/’开始的相对路径,以服务器根路径开始的基准
    --%>
    <%--引入bootstrap--%>
    <link href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
    <%--引入jquery--%>
    <script type="text/javascript" src="/static/js/jquery-1.4.2.min.js"></script>
</head>
<body>
<div class="container">
    <%--标题--%>
    <div class="row">
        <div class="col-md-12">
            <h1>SSM02_CRUD</h1>
        </div>
    </div>
    <%--两个按钮--%>
    <div class="row">
        <div class="col-md-4 col-md-offset-8">
            <button class="btn btn-success">新增</button>
            <button class="btn btn-danger">删除</button>
        </div>
    </div>
    <%--显示数据--%>
    <div class="row">
        <div class="col-md-12">
            <table class="table table-hover">
                <tr>
                    <th>#</th>
                    <th>empName</th>
                    <th>gender</th>
                    <th>email</th>
                    <th>department</th>
                    <th>操作</th>
                </tr>
                <c:forEach items="${pageInfo.list}" var="emp">
                    <tr>
                        <th>${emp.empId}</th>
                        <th>${emp.empName}</th>
                        <th>${emp.gender=="M"?"男":"女"}</th>
                        <th>${emp.email}</th>
                        <th>${emp.department.deptName}</th>
                        <th>
                            <button class="btn btn-success btn-sm">
                                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
                                编辑
                            </button>
                            <button class="btn btn-danger btn-sm">
                                <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
                                删除
                            </button>
                        </th>
                    </tr>
                </c:forEach>
            </table>
        </div>
    </div>
    <%--分页信息--%>
    <div class="row">

        <%--分页的文字信息--%>
        <div class="col-md-6">
            <h3 style="color: blue">当前是第 ${pageInfo.pageNum} 页,总共有 ${pageInfo.pages} 页,一共有 ${pageInfo.total} 条记录。</h3>
        </div>

        <%--分页条--%>
        <div class="col-md-6">

            <nav aria-label="Page navigation">
                <ul class="pagination">

                    <%--首页--%>
                    <li><a href="/ssm02/emps?pn=1">首页</a></li>
                    <%--判断是否含有上一页--%>
                    <c:if test="${pageInfo.hasPreviousPage}">
                        <li>
                            <a href="/ssm02/emps?pn=${pageInfo.pageNum-1}" aria-label="Previous">
                                <span aria-hidden="true">&laquo;</span>
                            </a>
                        </li>
                    </c:if>

                    <%--页码12345--%>
                    <c:forEach items="${pageInfo.navigatepageNums}" var="page_Num">
                        <c:if test="${page_Num == pageInfo.pageNum}">
                            <li class="active"><a href="#">${page_Num}</a></li>
                        </c:if>
                        <c:if test="${page_Num != pageInfo.pageNum}">
                            <li><a href="/ssm02/emps?pn=${page_Num }">${page_Num}</a></li>
                        </c:if>
                    </c:forEach>

                    <%--判断是否有下一页--%>
                    <c:if test="${pageInfo.hasNextPage}">
                        <li>
                            <a href="/ssm02/emps?pn=${pageInfo.pageNum+1}" aria-label="Next">
                                <span aria-hidden="true">&raquo;</span>
                            </a>
                        </li>
                    </c:if>
                    <li><a href="/ssm02/emps?pn=${pageInfo.pages}">末页</a></li>
                </ul>
            </nav>

        </div>

    </div>

</div>
</body>
</html>

3.Msg.java 返回前端的json实体

//用来返回json的类
public class Msg {

    //状态码
    private int code;
    //提示信息
    private String msg;
    //用户返回给浏览器的信息
    private Map<String, Object> extend = new HashMap<String, Object>();

    public static Msg success() {
        Msg result = new Msg();
        result.setCode(100);
        result.setMsg("处理成功!");
        return result;
    }

    public static Msg fail() {
        Msg result = new Msg();
        result.setCode(400);
        result.setMsg("处理失败!");
        return result;
    }
}

3.Ajax异步请求方式的页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" ; charset="UTF-8">
    <title>员工列表</title>

    <%
        pageContext.setAttribute("APP_PATH", request.getContextPath());
    %>
    <%--web路径
     *不以‘/’开始的相对路径,以当前路径为基准
     以‘/’开始的相对路径,以服务器根路径开始的基准
    --%>
    <%--引入bootstrap--%>
    <link href="static/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
    <%--引入jquery--%>
    <script type="text/javascript" src="static/js/jquery-2.1.0.min.js"></script>
</head>
<body>


<!-- 员工添加的模态框 -->
<div class="modal fade" id="empAddModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span>
                </button>
                <h4 class="modal-title" id="myModalLabel">员工添加</h4>
            </div>
            <div class="modal-body">

                <form class="form-horizontal">
                    <div class="form-group">
                        <label class="col-sm-2 control-label">empName</label>
                        <div class="col-sm-10">
                            <input type="text" name="empName" class="form-control" id="empName_add_input"
                                   placeholder="empName">
                            <span class="help-block"></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">email</label>
                        <div class="col-sm-10">
                            <input type="text" name="email" class="form-control" id="email_add_input"
                                   placeholder="email@163.com">
                            <span class="help-block"></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">gender</label>
                        <div class="col-sm-10">
                            <label class="radio-inline">
                                <input type="radio" name="gender" id="gender1_add_input" value="M" checked="checked"> 男
                            </label>
                            <label class="radio-inline">
                                <input type="radio" name="gender" id="gender2_add_input" value="F"> 女
                            </label>
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-2 control-label">deptName</label>
                        <div class="col-sm-4">
                            <!-- 部门提交部门id即可 -->
                            <select class="form-control" name="dId">
                            </select>
                        </div>
                    </div>
                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
                <button type="button" class="btn btn-primary" id="emp_save_btn">保存</button>
            </div>
        </div>
    </div>
</div>


<div class="container">
    <%--标题--%>
    <div class="row">
        <div class="col-md-12">
            <h1>SSM02_CRUD</h1>
        </div>
    </div>
    <%--两个按钮--%>
    <div class="row">
        <div class="col-md-4 col-md-offset-8">
            <button class="btn btn-success" id="emp_add_modal_btn" data-target="#myModal">新增</button>
            <button class="btn btn-danger" id="emp_delete_all_btn">删除</button>
        </div>
    </div>
    <%--显示数据--%>
    <div class="row">
        <div class="col-md-12">
            <table class="table table-hover" id="emps_table">
                <thead>
                <tr>
                    <th>
                        <input type="checkbox" id="check_all"/>
                    </th>
                    <th>#</th>
                    <th>empName</th>
                    <th>gender</th>
                    <th>email</th>
                    <th>department</th>
                    <th>操作</th>
                </tr>
                </thead>
                <tbody>

                </tbody>
            </table>
        </div>
    </div>
    <%--分页信息--%>
    <div class="row">
        <%--分页的文字信息--%>
        <div class="col-md-6" id="page_info_area">
            <h3 style="color: blue"></h3>
        </div>
        <%--分页条--%>
        <div class="col-md-6" id="page_nav_area">

        </div>

    </div>

</div>

<script>
    /*页面加载完成值后,直接发送一个ajax请求,请求分页数据*/
    var totalRecord, currentPage;
    //1、页面加载完成以后,直接去发送ajax请求,要到分页数据
    $(function () {
        //去首页
        to_page(1);
    });

    function to_page(pn) {
        $.ajax({
            url: "${APP_PATH}/emps",//请求地址
            data: "pn=" + pn,//请求携带数据的页码
            type: "GET",
            success: function (result) {
                //console.log(result);
                //1、解析并显示员工数据
                build_emps_table(result);
                //2、解析并显示分页信息
                build_page_info(result);
                //3、解析显示分页条数据
                build_page_nav(result);
            }
        });
    }

    //1.解析所有的员工数据
    function build_emps_table(result) {
        //清空table表格
        $("#emps_table tbody").empty();
        var emps = result.extend.pageInfo.list;
        //遍历数据
        $.each(emps, function (index, item) {
            //alert(item.empName);
            var checkBoxTd = $("<td><input type='checkbox' class='check_item'/></td>")
            var empIdTd = $("<td></td>").append(item.empId);
            var empNameTd = $("<td></td>").append(item.empName);
            var genderTd = $("<td></td>").append(item.gender == 'M' ? "男" : "女");
            var emailTd = $("<td></td>").append(item.email);
            var deptNameTd = $("<td></td>").append(item.department.deptName);

            var editBtn = $("<button></button>").addClass("btn btn-success btn-sm edit-btn").append($("<span></span>").addClass("glyphicon glyphicon-pencil")).append("编辑");
            //获取对应按钮的员工ID
            editBtn.attr("edit-id", item.empId);
            var delBtn = $("<button></button>").addClass("btn btn-danger btn-sm delete-btn").append($("<span></span>").addClass("glyphicon glyphicon-trash")).append("删除");
            //获取对应按钮的员工ID
            delBtn.attr("del-id", item.empId);
            var btnTd = $("<td></td>").append(editBtn).append("  ").append(delBtn);

            $("<tr></tr>").append(checkBoxTd)
                .append(empIdTd)
                .append(empNameTd)
                .append(genderTd)
                .append(emailTd)
                .append(deptNameTd)
                .append(btnTd)
                .appendTo("#emps_table tbody");
        });

    }

    //2.解析显示分页信息
    function build_page_info(result) {
        $("#page_info_area").empty();
        $("#page_info_area").append("当前是第" + result.extend.pageInfo.pageNum + " 页,总共有" + result.extend.pageInfo.pages + " 页,一共有" + result.extend.pageInfo.total + " 条记录。");
    }

    //3. 解析显示分页条
    function build_page_nav(result) {
        $("#page_nav_area").empty();
        var ul = $("<ul></ul>").addClass("pagination");

        var firstPageLi = $("<li></li>").append($("<a></a>").append("首页").attr("href", "#"));
        var prePageLi = $("<li></li>").append($("<a></a>").append("&laquo;"));
        if (result.extend.pageInfo.hasPreviousPage == false) {
            firstPageLi.addClass("disabled");
            prePageLi.addClass("disabled");
        } else {
            //为元素添加点击翻页的事件
            firstPageLi.click(function () {
                to_page(1);
            });
            prePageLi.click(function () {
                to_page(result.extend.pageInfo.pageNum - 1);
            });
        }

        var nextPageLi = $("<li></li>").append($("<a></a>").append("&raquo;"));
        var lastPageLi = $("<li></li>").append($("<a></a>").append("末页").attr("href", "#"));
        //首页和前一页

        if (result.extend.pageInfo.hasNextPage == false) {
            nextPageLi.addClass("disabled");
            lastPageLi.addClass("disabled");
        } else {
            nextPageLi.click(function () {
                to_page(result.extend.pageInfo.pageNum + 1);
            });
            lastPageLi.click(function () {
                to_page(result.extend.pageInfo.pages);
            });
        }
        ul.append(firstPageLi).append(prePageLi);

        // 遍历页码
        $.each(result.extend.pageInfo.navigatepageNums, function (index, item) {
            var numLi = $("<li></li>").append($("<a></a>").append(item));
            if (result.extend.pageInfo.pageNum == item) {
                numLi.addClass("active");
            }
            numLi.click(function () {
                to_page(item);
            });

            ul.append(numLi);
        });
        // 末页和下一页
        ul.append(nextPageLi).append(lastPageLi);
        var navEle = $("<nav></nav>").append(ul);
        navEle.appendTo("#page_nav_area");
    }


    //点击新增按钮弹出模态框。
    $("#emp_add_modal_btn").click(function () {
        //清除表单数据(表单完整重置(表单的数据,表单的样式))
        //reset_form("#empAddModal form");
        //s$("")[0].reset();

        //发送ajax请求,查出部门信息,显示在下拉列表中
        getDepts("#empAddModal select");
        //弹出模态框
        window.location.href = "/ssm02/add.jsp";
        $("#empAddModal").modal({
            backdrop: "static"
        });
    });


    //点击编辑按钮回显信息,并且跳转页面
    $(document).on("click", ".edit-btn", function () {
        //回显部门信息,显示信息
        getEmp($(this).attr("edit-id"));
        window.location.href = "/ssm02/edit.jsp";
    });

    //回显员工信息
    function getEmp(id) {
        $.ajax({
            url: "${APP_PATH}/emp/" + id,
            type: "GET",
            success: function (result) {
                var empData = result.extend.emp;
                $("#empName_add_input").text(empData.empName);
                $("#email_add_input").val(empData.email);
                //$("#oo  input[name=gender]").val([empData.gender]);
                //$("#").val([empData.dId]);
            }
        });
    }


    //删除员工的信息
    $(document).on("click", ".delete-btn", function () {
        //弹出提示框架
        var empName = $(this).parents("tr").find("td:eq(2)").text();
        var empId = $(this).attr("del-id");
        if (confirm("确认删除【" + empName + "】吗???")) {
            //确认后发送ajax请求
            $.ajax({
                url: "${APP_PATH}/emp/" + empId,
                type: "DELETE",
                success: function (result) {
                    alert(result.msg);
                    //回到本页面
                    window.location.href = "/ssm02/index.jsp";
                }
            });
        }
    });


    //查出所有的部门信息并显示在下拉列表中
    function getDepts(ele) {
        //清空之前下拉列表的值
        $(ele).empty();
        $.ajax({
            url: "/ssm02/depts",
            type: "GET",
            success: function (result) {
                //{"code":100,"msg":"处理成功!",
                //"extend":{"depts":[{"deptId":1,"deptName":"开发部"},{"deptId":2,"deptName":"测试部"}]}}
                //console.log(result);
                //显示部门信息在下拉列表中
                //$("#empAddModal select").append("")
                $.each(result.extend.depts, function () {
                    var optionEle = $("<option></option>").append(this.deptName).attr("value", this.deptId);
                    optionEle.appendTo(ele);
                });
            }
        });

    }


    //完成全选的操作
    $("#check_all").click(function () {
        $(".check_item").prop("checked", $(this).prop("checked"));
    });

    //当其余选项填满时候,最上面的元素也会选中
    $(document).on("click", ".check_item", function () {
        //判断院士是否为5个
        var flag = $(".check_item:checked").length == $(".check_item").length;
        $("#check_all").prop("checked", flag);
    });

    //删除选中 批量删除
    $("#emp_delete_all_btn").click(function () {

        //拼装姓名和要删除id的字符串
        var empNames = "";
        var del_idstr = "";
        $.each($(".check_item:checked"), function () {
            empNames += $(this).parents("tr").find("td:eq(2)").text() + ",";
            del_idstr += $(this).parents("tr").find("td:eq(1)").text() + "-";
        });

        //删除多余的字符串 都好 和  线
        empNames = empNames.substring(0, empNames.length - 1);
        del_idstr = del_idstr.substring(0, del_idstr.length - 1);

        if (confirm("确认删除【" + empNames + "】吗???")) {
            //发送ajax的请求,删除选中
            $.ajax({
                url: "${APP_PATH}/emp/" + del_idstr,
                type: "DELETE",
                success: function (result) {
                    alert(result.msg);
                    //回到当前页面
                    window.location.href = "/ssm02/index.jsp";

                }

            });
        }
    });
</script>
</body>
</html>

评论

评论  分享  打赏