SMM项目分页显示列表及列表数据增删改

Day04:项目分页显示列表及列表数据增删改

day04总任务:

  • 分页显示列表(难点)
  • 列表数据的删除
  • 列表数据的编辑
  • 列表数据的添加(作业)

列表数据的增删改太简单了,此处就不再赘述.(和前一天的注册内容没什么差别)

下面就主要讲讲分页显示编写过程.

列表分页

1.准备过程

首先,要确定除了列表数据外还需要哪些数据来实现列表分页功能:
总页数 当前页数 总记录数 每页记录数

则,建立PageInfo类:

public class PageInfo<T> {
    private List<T> list;		// 当前页需要展示的数据
    private int totalPage;      // 总页数
    private int totalCount;     // 总记录数
    private int size;           // 每页数据量
    private int currentPage;    // 当前页数
}

其他构造函数set,get函数略

2.界面控制

注意
随列表数据变化的动态数据从后台获取.

前端实现分页逻辑:
利用a标签传参进入更新的列表界面实现获取指定页内容更新列表.

实现:
传递参数到currentPage中,让后台根据currentPage算出列表显示数据
分页部分代码:

<!-- .box-footer-->
<div class="box-footer">
	<div class="pull-left">
		<div class="form-group form-inline">
                            总共${pageInfo.totalPage} 页,共${pageInfo.totalCount} 条数据。 每页
			<select class="form-control">
				<option>1</option>
				<option>2</option>
				 <option>3</option>
				 <option>4</option>
				 <option>5</option>
			</select> 条
		</div>
	</div>

    <div class="box-tools pull-right">
    	<ul class="pagination">
			<li>
				<a href="${pageContext.request.contextPath}/user/findAll03?currentPage=1" aria-label="Previous">首页</a>
			</li>
			<li>
				<a href="${pageContext.request.contextPath}/user/findAll03?currentPage=${pageInfo.currentPage - 1}">上一页</a>
			</li>
            <c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
            	<li>
            		<a href="${pageContext.request.contextPath}/user/findAll03?currentPage=${pageNum}">${pageNum}</a>
            	</li>
            </c:forEach>
            <li>
            	<a href="${pageContext.request.contextPath}/user/findAll03?currentPage=${pageInfo.currentPage + 1}">下一页</a>
            </li>
            <li>
                <a href="${pageContext.request.contextPath}/user/findAll03?currentPage=${pageInfo.totalPage}" aria-label="Next">尾页</a>
            </li>
        </ul>
	</div>
</div>
3.后台逻辑

接收前端参数(默认1): currentPage [当前页]
接收数据库结果参数: totalCount [总记录数]

实现逻辑:
根据总记录数和设置的每页记录数算出总页数
根据当前页数和设置的每页记录数算出应显示记录范围start,size
根据start,size查找数据库中记录并显示在界面上

实现

public PageInfo<User> findByPage(int currentPage) {
        PageInfo<User> pageInfo = new PageInfo<>();
        // 指定每页的数据量
        pageInfo.setSize(5);

        // 指定总数据量
        int totalCount = userDao.getTotal();
        pageInfo.setTotalCount(totalCount);

        // 指定总页数   ceil() 向上取整  floor() 向下取整  round() 四舍五入
        int totalPage = (int) Math.ceil(totalCount / (double)pageInfo.getSize());
        pageInfo.setTotalPage(totalPage);

        // 判断当前页是否合理
        if (currentPage < 1) {
            pageInfo.setCurrentPage(1);
        } else if (currentPage > totalPage) {
            pageInfo.setCurrentPage(totalPage);
        } else {
            pageInfo.setCurrentPage(currentPage);
        }

        // 指定当前页的数据   指定sql语句中的两个参数
        int start = (pageInfo.getCurrentPage() - 1) * pageInfo.getSize();
        List<User> list = userDao.findAllByPage(start, pageInfo.getSize());
        pageInfo.setList(list);

        return pageInfo;
    }

遇到问题

问题描述
数据没有显示到界面上,之前没分页的时候数据显示正常
数据不显示
问题分析
控制台输出正常显示获取数据,逻辑未出现问题

解决方案
更新dataList遍历数据的对象
datalist遍历对象
解决分析
列表遍历对象错误不能正确显示

成果展示

分页列表

总结

第一次写稍微复杂些的功能,跟着老师的脚步,感觉自己又进步了,但还是不够细心,要建立细心的好习惯呀,这样才能减少bug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值