我的分页~~~

zxczf 04-06-04

分为三个部分:持久层分页,界面显示(标签库),分页控制.
分页控制是界面显示,持久层分页的连接点.采用AbstractPagerHelper实现:
public abstract class AbstractPagerHelper {
public PageControl newPageControl(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
..................
return pageControl;
}
//每页显示的数据集合,可以在其中调用业务层或持久层方法
public abstract Collection getPagerData(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response,
long start,
long count)
throws Exception;
//总行数,可以在其中调用业务层或持久层方法
public abstract long getRowCount(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception;
}

持久层:
抽象Hibernate的Dialect,实现分页语法的简单封装.

在Action中:
PageControl pageControl = new AbstractPagerHelper() {
...//两个抽象类的实现(从业务层或持久层获取数据),newPageControl会调用这两个方法
}.newPageControl(mapping,form,request,response);
request.setAttribute("pageControl",pageControl);

jsp界面(标签库的样式是模仿bang的:),可以扩展更多的样式):
<smile:pager name="pageControl" page="/personBaseList.do?query=mmm">
<smile:first>First Page</smile:first> 
<smile:prev>Pre Page</smile:prev> 
<smile:index/> 
<smile:next>Next page</smile:next> 
<smile:last>Last Page</smile:last> 
</smile:pager>
<logic:iterate id="ps" name="pageControl" property="data" type="com.smiletilly.job.person.entity.PersonBaseInfo">
<tr>
<td><bean:write name="ps" property="id"/></td>
<td><bean:write name="ps" property="name"/></td>
</tr>
</logic:iterate>

欢迎讨论~~~
注:公司的分页我是直接利用我分页,而不是反向关系(因为公司对信息安全过分注重,故提到这一点).

banq
2004-06-05 09:37

不错,帮助顶一顶,和前面 http://www.jdon.com/jive/thread.jsp?forum=16&thread=12196
异曲同工。

ww9507
2004-06-16 11:56

思想真的不错,综合运用了struts及标签库,这两方面我接触不太久,但给我启发很大。。。。