1. 主题列表的分页显示
页码(当前页前后7页);总页数;总主题数;上一页;下一页;首页;尾页;
跳转到指定的页码;go
所有的信息都需要准备;
当前显示页的主题信息:
1.1 简单地显示出页码的效果
1,2,3 共3页,共54条记录 [首页][上一页][下一页][尾页]
<inputtype="text"><inputtype="button">
1.2 分析要实现上述效果,需要哪些?
=== 页码的显示
<forEach begin="1"end="${titlePageNum}" var="i">
</forEach>
=== 总页码数 ${titlePageNum}
=== 总记录数 ${titleItems}
=== 首尾页 ${i}
-----Forum.showForum 来准备所有的数据;增加一个页码参数
/Forum.do?method=showForum&id=46&pageNum=${i} &{i}
1,${currentPage+/-1}, ${totalPageNum}
-----将上述所有关于页码的信息放在一个PageBean中
page.items--- 主题数目;
page.currentPage,page.totalPageNum
-----写出PageBean : Page
totalPageNum,totalItems, currentPageNum,items(这页的数据,List)
--===---后面增加
pageSize---使用常量PAGE_SIZE或使用配置文件中参数,暂时先使用常量,放在PageBean中;
----Forum.showForum
获取参数,封装成PageBean
totalPageNum= (totalItems + pageSize - 1) / pageSize;
每页的第一条记录
firstResult= (pageNum-1) * pageSize;
-----一般不在Action中运算Page, 在业务层中处理,修改了一个方法
findTopicByForum
PagefindTopicByForum( Forum forum, int pageNum); // 返回一页的数据
在这里面完成刚才Action所分析的功能
Action中之需要调用这个方法获取一个Page对象,并存入request即可;
Service中需要2个数据,从DAO中获取
(1)当前页的数据列表:List
(2)总页数 -- 可以单独写一个DAO方法;也可以在(1)中返回这个数据;
(3)使用(2)中第2中方法,需要将返回结果封装成对象:QueryResult
Listitems, totalItems;
并使用它们增加一个构造方法;
这样进一步修改DAO.findTopicsByForum(Forumforum)
返回值为这个QueryResult对象;
注意返回总记录数时,先返回Number型,再转换为intValue
因为驱动程序不同,可能返回的是long或int,但是他们都是Number;
(4)修改DAO -> Service -> Action;
主要修改Service中的代码并简单优化;
Action增加对pageNum的异常处理
(5)当前页码的处理
颜色改变;加粗字体,不显示超链接
(6)第一页不写上一页页;最后一页不显示下一页;
currentPageNumgt1 显示上一页
currentPageNumlt totalPageNum 显示下一页
(7)去第几页
onclick="gotoPage(document.getElementByIdx('txtPageNum').value"
functiongotoPage(pageNum) {