基于SSH2和Ajax的分页实现

1 篇文章 0 订阅

网上关于 struts2 的分页实现也不少,但是通用性好的又高效的而且基于 Ajax 的实现的就不多,本人最近有空加心血来潮,写了这么一个基于 Struts2.09+Hibernate3.0+Spring2.0+prototype.js 的分页实现,希望对各位有所帮助。本文分三部分,分别是:一, DAO 的实现;二, Action 的实现;三,页面的实现。好了,废话少说,下面开始吧。

一、 DAO 的实现:

总体设计思路:

1.        封装 Spring org.springframework.orm.hibernate3.support.HibernateDaoSuppor, 提供通用的查询方法。

2.        用一个 Bean 封装分页用到的信息,如:页数,起始记录,结束记录,上下页链接等等信息。此处用 PageBean.java

3.        Action 处理请求时调用一个分页方法,此分页方法实例化 PageBean.java ,由此得到分页的链接。

4.        用一个 Bean 封装分页查询用到的参数,此处用 BeanVO.java ,再用一个 Bean 封装查询结果,包括记录总数,记录集合等信息。此处用 QueryResultVO.java

5.        页面用一个 javascript 方法封装 prototype.js ajax 调用,包括默认的回调方法。此方法是固定不变的,要不每次调用改写一个方法让人受不了。

6.        写一个生成分页链接的模板,此模板必须是通用的,每次用的时候都不需要做任何修改。或者写几个模板,想用那种分页的风格就用哪个模板,相当方便。

总体设计思路就是这样了。

下面是类及包的设计:

上面的包的设计是为了方便,在实际项目中这样的包设计并不是很合理的。包就不用详细说明啦, dao 放的是 dao 层的接口及实现, service 放的是 service 层的接口及实现, action 放的自然是 Struts2 action 了, utills 放的是其他的 Bean 和常量等。下面对其中的几个关键类进行简单说明:

1 )、 BaseHibernateDaoSuppot.java 封装了 org.springframework.orm.hibernate3.support.HibernateDaoSuppor 的查询方法。提供简单的查询函数。

 

 

当然,还要写这个类对应的接口。 PaginationDao.java 这里省略。

3 )、 BaseVO.java 封装分页查询的参数

 

4 )、 QueryResultVO.java 封装分页查询结果的 Bean ,包括页数,总记录数,结果集合。

/**

  * 封装查询结果的 Bean ,包括页数,记录数,记录集

Dao 的框架已经搭建好了, Service 层只需要直接调用即可。这个例子的业务逻辑几乎为零,所以 Service 层很简单,读者自己写就好。

二、 Action 的实现

Action 都继承子一个 BaseAcion ,此类封装了几个重要参数: pageno ,当前页号,就是要告诉 dao 层,我要用第几到第几条记录。 PageBean ,分页的核心 Bean 封装了所有的分页信息。

1 )、 PageBean.java 的实现

2 )、当然,因为页面用到的链接也在后台生成,所以另外写个类来处理生成的 HTML

这里需要注意的是这个方法:

此方法生成链接时如果调用 ajax ,则生成的链接是这样的形式:

javascript:pageAjax('url','div'); 其中 url action 的路径, div 就是页面显示记录的层。

 

 

其中 public PageBean doCalcPageLinks 为核心的分页函数。完成分页并放到 PegeBean 的实例里去。

 

4 )好了,加上一个 Action 就差不多完成后台的代码了:

由于前面的大量工作,使得 action 用起来相当的简单了,与普通的 action 相比,只需要调用 calcPage 方法即可,当然,分页完了还得分发回这个方法,所以 pagination!enterReimbrseAjax.action 是再点击分页时分发到自身。

 

 

三、页面的编写:

 

页面和普通的页面差别不到,另外写一个 javascript 方法来实现 ajax 即可。

说明:

url :后台生成的分页链接:格式如:

pagination!enterReimbrseAjax.action?pageno=2

div 页面上装在分页结果集合的的层,必须与后台 BaseHelper.java getUrl 方法中的名字一致。当然,这段脚本是基于 prototype.js 的所以你必须导入 prototype.js 。这段脚本是固定不变的,所以最好写在外部的 js 文件中,用到的页面导入即可。

 

2 )、分页模板: page..jsp

分页模板可以用 struts2 兼容的任何语言来编写,可以用 jsp ,也可以用 freemarker ,由于本人对 freemarker 比较陌生,所以用 jsp 写了一个:

这个模板生成的分页样式是:共 100 当前 1 1-20 第一页 | 上一页 下一页 最后一页  

当然,如果你需要,你可以写成任何你喜欢的样式,包裹分组式的,还可以写成让用户选择分页大小的等等。 Jsp 要写的东西比较多,如果写成 ftl 文件会简洁很多,读者不妨试试。
3
Ajax 请求的返回,就是 div 层要放什么内容,这个相信用过 struts2 的同志都很熟悉了,就是让处理 ajax 请求的 action 返回到一个 jsp 去,这样就避免了写回调函数了。当然了返回的 jsp 页面内容要跟元页面的 div 里面的内容一样。

例如:

其中的 <s:component theme="simple" template="page.jsp"> struts2 的标签。

 

到这里,整个分页的项目已经差不多了,最后加上 struts2 的配置文件, spring 的配置文件即可。

 

到这里,一个高度可重用的分页就完成了。要在项目中使用,只需要,添加 page.jsp, 脚本函数 pageAjax 和在 action 中调用分页函数就可以了。

 

如何改进:

1 )、 page.jsp 可以做成更加丰富的分页样式,改成什么样完全确定你的项目需要。

2 )、把 BaseHelper.java 中合成链接的方法中的 javascript 函数名定义到常量去作为参数传入,就可以实现更灵活的实现。

3 )、几乎不需要额外的改进,就可以实现一个页面两个分页(因为是异步的)。

4 )、 dao 的方法稍加改进即可实现复杂的 hql 的分页查询,例如,你可以重新拼接 hql 字符串。

 


 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值