PageHelper 分页插件只用Page、不用PageInfo 的写法

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>
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值