- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Struts分页的一个实现
Struts分页的一个实现在Web应用程序里,分页总让我们开发人员感到很头疼,倒不是因为技术上有多么困难,只是本来和业务没有太多关系的这么一个问题,你却得花不少功夫来处理。要是稍不留神,时不时出点问题就更郁闷了。我现在做的一个项目也到了该处理分页的时候了,感觉以前处理得都不好,所以这次有所改变,基本目标是在现有(未分页)的代码基础上,尽量少做修改,并且同样的代码可以应用于不同模块的分页。以下就是我用的方法:
首先,考虑分页绝大多数发生在列表时,组合查询时也需要用到。在我的项目里,列表的Action一般名字为ListXXXActioin,例如客户列表是ListClientsAction等等。在未分页前,ListXXXAction里会把所有的对象取出,通过request.setAttribute()放在request里,然后将请求转向到列表的jsp(例如listClients.jsp)显示出来(你可能会说不要在Action里放业务逻辑,但现在这不是我们考虑的重点)。而分页后,我们只取用户请求页对应的那些对象。为了最大限度的达到代码重用,我做了以下工作:
1、新建一个Pager类,该类有beginPage、endPage、currentPage、pageSize和total等int类型的属性,分别代表开始页、结束页、当前页、每页记录数和总记录数,它主要是让jsp页面显示页导航使用的。请注意currentPage属性是从0开始的。
2、新建一个AbstractListActioin类,并让所有ListXXXAction都继承它。在这个类里覆盖execute()方法,可以在这里判断权限等等,并在判断权限通过后执行一个abstract的act()方法,这个act()由ListXXXAction来实现。
3、在AbstractListAction里增加getPage()方法,用来从request得到用户请求的页码(若未请求则认为是第0页):
protected?int?getPage(HttpServletRequest?request)?{ ????String?p?=?request.getParameter(p); ????if?(p?==?null) ????????return?0; ????else ????????try?{ ????????????return?Integer.parseInt(p); ????????}?catch?(NumberFormatException?e)?{ ????????????return?0; ????????} }
?
4、在AbstractListAction里增加makePager()方法,用来向request里增加一个Pager类的实例,供jsp页面显示页导航:
protected?Pager?makePager(HttpServletRequest?request,?int?total)?{ ????Pager?pager=new?Pager(); ????pager.setTotal(total); ????pager.setPageSize(Config.getInstance().getPageSize()); ????pager.setBeginPage(0); ????pager.setEndPage(((pager.getTotal())?-?1)?/?pager.getPageSize()?+?1); ????pager.setCurrentPage(getPage(request)); ????return?pager; }
?
注意在我的项目里,每页记录数是写在配置文件里的,如果你没有配置文件,上面第4行setPageSize()的参数直接填数字即可,例如pager.setPageSize(10);
5、这样,所有的ListXXXAction都可以使用getPage()得到请求的页码,并且能够方便的通过makePager()构造需要放在request里的pager对象了。现在要在从数据库取数据的代码上再做一些修改,即只取所需要的那一部分数据。由于我的项目中使用了Hibernate,所以这个修改也不是很困难。未分页前,在我的ListClientsAction里是通过构造一个Query来得到全部Client的,现在,只要在构造这个Query后再加两句(setMaxResults和setFirstResult)即可:
Query?query?=??;//构造query的语句? int?total?=??;//得到总记录数? Pager?pager?=?makePager(request,?total);//调用父类中
您可能关注的文档
最近下载
- 皮带硫化知识.doc VIP
- [紧固件]常用紧固件选型设计.pdf VIP
- 高速公路钢筋混凝土盖板涵首件施工方案.doc VIP
- 解读《GB_Z 44526 - 2024无损检测 操作能力鉴定》全面解读.docx VIP
- 本田GX630-660-690发动机维修手册.pdf VIP
- 2025四川成都东部集团有限公司及下属企业招聘产业招商等岗位94人笔试备考题库及答案解析.docx VIP
- (全国通用)01-2023年秋季高一入学分班考试模拟卷地理试题(解析版).docx VIP
- 20210129-中信建投-因子深度研究系列:高频订单失衡及价差因子.pdf VIP
- 发电厂检修规程.docx VIP
- 2024-2025学年度第二学期期末综合素质调研七年级英语试题(含听力材料及答案).docx
文档评论(0)