任务九 实现产品分页显示
学习目标
理解分页的算法。
会使用分页算法处理产品的显示问题。
任务描述
产品展示是企业门户网站非常重要的一个模块,而且通常一家企业要展示的产品会比较多,如果把所有的产品信息都放在同一个页面,页面会很冗长。为了更好地规划页面,通常会使用如图1-9-1所示的分页技术,对多条内容进行整理。不仅仅是产品,网站中很多信息都需要使用分页,例如新闻显示、留言显示等。
图1-9-1 产品分页显示效果图
本次任务要求实现产品分页展示。
任务分析与相关知识
1.分页算法
分页其实是一个数据问题。在分页之前需要明确以下几点:
1)一页显示多少数据(需要提前设定)。
2)一共有多少数量的记录需要分页。
3)一共有多少页的数据可以被浏览。
以分苹果为例,如果一个礼品篮最多装n个苹果,现在有m个编过号的苹果(假设苹果从0开始编号,在礼品蓝中也是一个挨着一个顺序排放),请回答如下两个问题:
1)一共需要多少个礼品篮才能装下所有的苹果?
2)如果现在需要查看第x个礼品篮中的苹果,请问第x个礼品篮中第一个苹果是几号苹果?
对于第一个问题,可以按图1-9-2所示这样分析。
图1-9-2 需要的礼品篮个数
也可以把上面的结果简化成一个公式:
需要的篮子数=(m+n−1)/n
对于第二个问题,可以用列举法找到规律,如表1-9-1所示。
表1-9-1 寻找第x个篮子的第一个苹果编号
所以,第x个篮子里第一个苹果的编号是“(x−1)*n”(假设第一个苹果编号是0)。
综上所述,如果一个页面所能容纳的产品数量为PAGESIZE,一共有max条产品信息需要显示,那么总页数就是(max+PAGESIZE−1)/PAGESIZE;如果当前页面要显示第nowpage页的内容,那么实际上是从产品表中,索引位置为“(nowpage−1)*PAGESIZE”的记录开始取信息。
2.分页案例
以新闻显示为例,展示JSP页面如何实现分页技术。
1)为了对页面中容纳的新闻信息的条数进行统一的管理,建立一个CONSTANTS类,存放这些公共变量的值。
在Hello项目中添加一个Java文件CONSTANTS.java,包名为models,代码如下所示。
代码1-9-1 CONSTANTS.java
其中,NEWS_PAGESIZE中存放了新闻显示页面一页能容纳的新闻的数量。
2)在Hello项目中添加一个JSP文件news_page.jsp,代码如下所示。
代码1-9-2 news_page.jsp
在上述案例中,第179~182行是分页的超链接,如果单击“首页”就直接把页码参数设置为1;如果单击“上页”,则在当前要显示的页码的基础上减去1;同理,单击“下页”,则在当前要显示的页码基础上加1;单击“末页”,应该直接定位到最大页码处。
这里用到的nowpage来自第122行,从查询字符串中取出页码信息,这个数据在使用之前要确认三件事情:
1)如果用户没有传递页码参数,例如第一次访问这个页面时,应该默认页码为1。
2)如果用户传递的页码参数小于1,例如当前页码为第一页,用户单击“上页”,就会传递0过来,这时候,应该对当前页面完成下限判断,如第146行所示。
3)如果用户传递的页码参数大于最大页码,例如当前页码为最后一页,用户单击“下页”,就会传递最大页码+1过来,这时候,应该对当前页面完成上限判断,如第147行所示。
maxpage来自第144行,根据之前确定的算法,可以根据一页的容量和总记录数计算出maxpage。
运行Hello项目,测试news_page.jsp,效果如图1-9-3所示。
图1-9-3 新闻分页显示效果图
任务实施
1.任务单
本次任务的任务清单见表1-9-2。
表1-9-2 任务九的任务清单
2.实施步骤
步骤一 在GreenBar项目中添加一个Java文件CONSTANTS.java,包名为models,代码如下所示。
代码1-9-3 CONSTANTS.java
【操作提示】
请模仿代码1-9-1的第3行代码的写法,完成第4行的代码。
步骤二 打开GreenBar项目中的Products.java(在任务8代码1-8-8中已定义),在原有的类的定义中,插入两个新的方法,代码如下所示。
代码1-9-4 Products.java中添加的方法
【操作提示】
1)请模仿代码1-9-2的第144~145行代码的写法,完成第13行的代码。
2)请模仿代码1-9-2的149行代码的写法,完成第27行的代码。
3)根据数据存取需求完成第35~44行的代码。
步骤三 在GreenBar项目中添加一个JSP文件products.jsp,代码如下所示。
代码1-9-5 products.jsp
【操作提示】
请模仿代码1-9-2的第179~182行代码的写法,完成第118~121行的代码。
运行GreenBar项目,测试products.jsp,效果如图1-9-4所示。
图1-9-4 产品分页显示效果图
自我评价
思考与练习
一、填空题
1.如果产品中心页面最多能显示10件产品,产品表中存储了M条产品记录,那么产品的显示一共需要____页才能浏览完所有的产品。如果单击第3页的超链接,希望看到第3页的所有产品信息,那么应该从产品表的第____条记录开始查看数据。
2.如果要定义一个整型常量PRODUCT_SIZE,并赋值为10,应该如何写:____
3.ResultSet类中提供了____方法,用来直接定位到指定位置的记录。
4.ArrayList类提供了____方法,用来从指定索引的位置开始提取集合的一部分数据。
5.假设当前的页码为page,要显示数据的最大页码为maxpage,请完成如下分页超链接语句:
1)<ahref=____>第一页</a>
2)<ahref=____>上页</a>
3)<ahref=____>下页</a>
4)<ahref=____>末页</a>
二、操作题
模仿本次任务,实现留言中心的留言分页浏览功能,效果如图1-9-5所示。
图1-9-5 留言分页显示效果图