美文网首页
PageHelper 分页插件只用Page、不用PageInfo

PageHelper 分页插件只用Page、不用PageInfo

作者: 安易学车 | 来源:发表于2020-03-11 15:45 被阅读0次

    PageHelper 分页插件,学到的写法是得到Page 对象后再转成PageInfo 对象,但Page 是ArrayList 的子类,里面包含了数据列表和分页信息,为什么不能直接用Page 对象做分页呢?问题只是如何在页面取出Page 中数据。经过多次尝试,终于验证这个想法是可行的。

    0)环境:SpringMVC + Spring + MyBatis。

    1)mybatis 配置文件添加PageHelper 插件信息。

    <plugins>

    <plugin interceptor="com.github.pagehelper.PageHelper">

    <property name="dialect" value="mysql"/>

                <!--reasonable 默认false,设为true 时,当pageNum(当前页) 小于1时,会自动为其赋值为1。-->

                <property name="reasonable" value="true"/>

    </plugin>

    </plugins>

    2)Service 实现类,直接返回Page 对象。

        PageHelper.startPage() 的两个参数:pageNum (当前页) 通过第一步的配置完成初始化;pageSize (每页展示条数) 可以放到常量接口类(放utils 包) 里面。

    @Override

    public Page<User>  getUserPage(Page<User> page) {

    PageHelper.startPage(page.getPageNum(), 3);

    return (Page<User>) userDao.getUserList();

    }

    3)Controller 方法。此处方法形参Page<User> 直接就是插件里的Page 类。

    此处Page 类后面不写<User> 的话,进入用户列表页面时浏览器会报一个奇怪的错误:Root Cause: java.lang.IllegalArgumentException: Cannot generate variable name for non-typed Collection parameter type,控制台没报错信息,Baidu Google 都找不到一样的案例,最后自己发现是形参类不完整的问题。

            @Autowired

    private IUserService userService;

    @RequestMapping(value = "/getUserPage")

    public String getUserPage(Page<User> page, ModelMap map) {

    page = userService.getUserPage(page);

    map.put("page", page);

    map.put("url", "user/getUserPage?");

    return "userList";

    }

    4)展示页面,因为page 是ArrayList 的子类,直接把它作为List 来用即可。

    <table border="1" class="layui-table">

    <tr>

    <td>id</td>

    <td>姓名</td>

    <td>密码</td>

    <td>生日</td>

    <td>操作</td>

    </tr>

    <c:forEach items="${page}" var="user">

    <tr>

    <td>${user.id}</td>

                <td>${user.name}</td>

    <td>${user.password}</td>

    <td>${user.birthday}</td>

    <td>

    <a href="#">编辑</a>

    <a href="#">删除</a>

    </td>

    </tr>

    </c:forEach>

    </table>

    <jsp:include page="/common/page.jsp"/>

    5)分页页面,用了layui 分页插件。关键在这里:Page 对象里含有分页信息,但因为它又是List,直接用${page.total} 这种写法是取不到分页信息的,试了几次,用下面代码写法可行:${page.getTotal()} 。

    PS: 还有一种用下标的EL 表达式写法,不循环也能取到List 里面实体数据的值:${page[0].id} 。

    <html>

    <head>

    <base href="<%=request.getContextPath()+"/"%>">

    <!-- 样式文件 -->

    <link rel="stylesheet" href="js/layui/css/layui.css" media="all">

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Insert title here</title>

    <!-- js文件 -->

    <script src="js/layui/layui.js"></script>

    <script>

    layui.use('laypage', function(){

      var laypage = layui.laypage;

      //执行一个laypage实例

      laypage.render({

        elem: 'test1' //注意,这里的 test1 是 ID,不用加 # 号

        ,count: "${page.getTotal()}" //数据总数,从服务端得到

        ,limit:"${page.getPageSize()}"

        ,curr:"${page.getPageNum()}"

        , layout: ['prev', 'page', 'next','count']

        ,jump: function(obj, first){ // 切换页码的时候调用

        debugger

            //obj包含了当前分页的所有参数,比如:

            console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。

            console.log(obj.limit); //得到每页显示的条数

            //首次不执行

            if(!first){

            location.href="${url}pageNum="+obj.curr

            }

          }

      });

    });

    </script>

    </head>

    <body>

    <!-- 分页导航条 -->

    <div id="test1"></div>

    </body>

    </html>

    ————————————————

    版权声明:本文为CSDN博主「rock154」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/rock154/article/details/80230545

    相关文章

      网友评论

          本文标题:PageHelper 分页插件只用Page、不用PageInfo

          本文链接:https://www.haomeiwen.com/subject/luicjhtx.html