PageHelper 分頁插件粥脚,學(xué)到的寫法是得到Page 對象后再轉(zhuǎn)成PageInfo 對象,但Page 是ArrayList 的子類包个,里面包含了數(shù)據(jù)列表和分頁信息刷允,為什么不能直接用Page 對象做分頁呢?問題只是如何在頁面取出Page 中數(shù)據(jù)碧囊。經(jīng)過多次嘗試树灶,終于驗證這個想法是可行的。
0)環(huán)境:SpringMVC +?Spring + MyBatis糯而。
1)mybatis 配置文件添加PageHelper 插件信息天通。
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
? ? ? ? ? ? <!--reasonable 默認(rèn)false,設(shè)為true 時熄驼,當(dāng)pageNum(當(dāng)前頁) 小于1時土砂,會自動為其賦值為1。-->
? ? ? ? ? ? <property name="reasonable" value="true"/>
</plugin>
</plugins>
2)Service?實現(xiàn)類谜洽,直接返回Page 對象萝映。
????PageHelper.startPage() 的兩個參數(shù):pageNum (當(dāng)前頁) 通過第一步的配置完成初始化;pageSize (每頁展示條數(shù)) 可以放到常量接口類(放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> 的話实束,進(jìn)入用戶列表頁面時瀏覽器會報一個奇怪的錯誤:Root Cause: java.lang.IllegalArgumentException: Cannot generate variable name for non-typed Collection parameter type奥秆,控制臺沒報錯信息,Baidu Google 都找不到一樣的案例咸灿,最后自己發(fā)現(xiàn)是形參類不完整的問題构订。
????????@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 分頁插件审胸。關(guān)鍵在這里:Page 對象里含有分頁信息亥宿,但因為它又是List,直接用${page.total} 這種寫法是取不到分頁信息的砂沛,試了幾次烫扼,用下面代碼寫法可行:${page.getTotal()} 。
PS: 還有一種用下標(biāo)的EL 表達(dá)式寫法碍庵,不循環(huán)也能取到List 里面實體數(shù)據(jù)的值:${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;
? //執(zhí)行一個laypage實例
? laypage.render({
? ? elem: 'test1' //注意悟狱,這里的 test1 是 ID,不用加 # 號
? ? ,count: "${page.getTotal()}" //數(shù)據(jù)總數(shù)堰氓,從服務(wù)端得到
? ? ,limit:"${page.getPageSize()}"
? ? ,curr:"${page.getPageNum()}"
? ? , layout: ['prev', 'page', 'next','count']
? ? ,jump: function(obj, first){ // 切換頁碼的時候調(diào)用
? ? debugger
? ? ? ? //obj包含了當(dāng)前分頁的所有參數(shù)芽淡,比如:
? ? ? ? console.log(obj.curr); //得到當(dāng)前頁,以便向服務(wù)端請求對應(yīng)頁的數(shù)據(jù)豆赏。
? ? ? ? console.log(obj.limit); //得到每頁顯示的條數(shù)
? ? ? ? //首次不執(zhí)行
? ? ? ? if(!first){
? ? ? ? location.href="${url}pageNum="+obj.curr
? ? ? ? }
? ? ? }
? });
});
</script>
</head>
<body>
<!-- 分頁導(dǎo)航條 -->
<div id="test1"></div>
</body>
</html>
————————————————
版權(quán)聲明:本文為CSDN博主「rock154」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議富稻,轉(zhuǎn)載請附上原文出處鏈接及本聲明掷邦。
原文鏈接:https://blog.csdn.net/rock154/article/details/80230545