论坛首页 入门技术论坛

理想的分页方案

浏览 12383 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-04-14  
首先明确的是:此方案不是解决怎样分页,而是解决page参数在service和dao中大量存在的问题.让程序员完全从分页中解脱出来.
大家可以尝试下.程序是否更加干净,程序员工作是否更少.现我的系统就是采用此种方式.
效果很好! 
以前的分页总是Action中获取分页信息.然后在service,dao的方法中传递参数进行分页查询,返回分页的信息.
   我上一个项目就是这样.导致service,dao中有大量的page参数.曾经想过用AOP方式进行分页参数的获取.填充.但是分页与不分页混乱,不易控制.

改进了下用AOP的思路.完成此种分页方案.欢迎大家批评.但不要过激哟!我只是一个java新人而已,这样会打击我的....$#^%^&
系统采用SSH2.
整体有文件五个.
1.page.jsp.在需要分页的jsp中用<jsp:include>包含.
2.page.js负责分页的js.
3.page的java类.包括totalRows,pageSize等.就是网上到处可见的page类写法.
如上三个文件中的属性要一致.
4.在ActionSupport中提供preparePage()方法.该方法负责收集jsp传递过来的分页信息,将生成的page对时象入到request的attribute中,供page.jsp使用.并且放到PageUtils类中.endPage()方法,结束分页.
5.PageUtils是该分页的核心所在.但是很简单.他有一个静态变量(TheadLocal类型)
6.修改Spring的源码.在查询之前取出PageUtils的值,如有进行分页,没有则不分页.

整个分页架构完成.
程序员的工作.
1.在JSP中包含page.jsp
2.在Action中,如:
preparePage();
List<User> userList = userManager.findAll();
endPage();

List<User> userList1 = userManager.findAll();
userList是分页,而userList1不分页.

其余service,dao不需要关心分页东东.和不分页一样编写代码.
   发表时间:2008-04-14  
zhxp791008 写道
   以前的分页总是Action中获取分页信息.然后在service,dao的方法中传递参数进行分页查询,返回分页的信息.
   我上一个项目就是这样.导致service,dao中有大量的page参数.曾经想过用AOP方式进行分页参数的获取.填充.但是分页与不分页混乱,不易控制.

改进了下用AOP的思路.完成此种分页方案.欢迎大家批评.但不要过激哟!我只是一个java新人而已,这样会打击我的....$#^%^&
系统采用SSH2.
整体有文件五个.
1.page.jsp.在需要分页的jsp中用<jsp:include>包含.
2.page.js负责分页的js.
3.page的java类.包括totalRows,pageSize等.就是网上到处可见的page类写法.
如上三个文件中的属性要一致.
4.在ActionSupport中提供preparePage()方法.该方法负责收集jsp传递过来的分页信息,将生成的page对时象入到request的attribute中,供page.jsp使用.并且放到PageUtils类中.endPage()方法,结束分页.
5.PageUtils是该分页的核心所在.但是很简单.他有一个静态变量(TheadLocal类型)
6.修改Spring的源码.在查询之前取出PageUtils的值,如有进行分页,没有则不分页.

整个分页架构完成.
程序员的工作.
1.在JSP中包含page.jsp
2.在Action中,如:
preparePage();
List<User> userList = userManager.findAll();
endPage();

List<User> userList1 = userManager.findAll();
userList是分页,而userList1不分页.

其余service,dao不需要关心分页东东.和不分页一样编写代码.

本人QQ号:107607700,欢迎交流

呵呵 ,很好很强大,不过我用 T5 所以我决定看是否能实现你这个分页组件。

但你这个是否可以直接:
2.在Action中,如:
preparePage();
List<User> userList = userManager.findAll();
endPage();
是否可以直接annotation下,更简单,不然总觉得preparePage();和endPage(); 很碍眼。
0 请登录后投票
   发表时间:2008-04-14  
哥们.我对annotation不熟悉.你整下.完成共享下.
0 请登录后投票
   发表时间:2008-04-14  
有那么十来万的记录,估计你一个userManager.findAll();就死翘翘了。
0 请登录后投票
   发表时间:2008-04-14  
mmwy 写道
有那么十来万的记录,估计你一个userManager.findAll();就死翘翘了。

如果是注入的话。。。
应该可以。在dao开始之前之后注入查询代码之中去。。。
0 请登录后投票
   发表时间:2008-04-14  
既然选择java,那就拥抱oo。
为何不定义一个page的model呢?存放page信息。
0 请登录后投票
   发表时间:2008-04-14  
stone说的就是page类
mmwy所说:有那么十来万的记录,估计你一个userManager.findAll();就死翘翘了。
利用分页1亿条.也只是取其中的几十来条而已.就如抛出异常的爱所说:
在DAO执行真正的查询数据之前.利用page类的信息对SQL(HQL等)进组装.改成分页的SQL,
这才是真正执行的SQL.
0 请登录后投票
   发表时间:2008-04-14  
没什么意义
0 请登录后投票
   发表时间:2008-04-14  
ssuupv 写道
没什么意义

根据规则翻页。。
可以分离观注点
0 请登录后投票
   发表时间:2008-04-14  
stone 写道
既然选择java,那就拥抱oo。
为何不定义一个page的model呢?存放page信息。

对...
我们所有的分页都都是一个PageResult.然后写个宏.直接在velocity 上面一句话搞定一切.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics