首页 »Java教程 » struts2整合spring:Hibernate+Spring+Struts2整合开发中的一个分页显示方案 »正文
struts2整合spring:Hibernate+Spring+Struts2整合开发中的一个分页显示方案
来源: 发布时间:星期五, 2009年1月23日 浏览:282次 评论:0
分页显示 ![](/icons/6977yi.gif) 直是web开发中 ![](/icons/6977yi.gif) 大烦琐 ![](/icons/6977de.gif) 难题 ![](/icons/6977dou.gif) 传统 ![](/icons/6977de.gif) 网页设计只在 ![](/icons/6977yi.gif) 个JSP或者ASP页面中书写所有有关数据库操作 ![](/icons/6977de.gif) 代码 ![](/icons/6977dou.gif) 那样做分页可能简单 ![](/icons/6977yi.gif) 点 ![](/icons/6977dou.gif) 但当把网站WebSite分层开发后 ![](/icons/6977dou.gif) 分页就比较困难了 ![](/icons/6977dou.gif) 下面是我做Spring+Hibernate+Struts2项目时设计 ![](/icons/6977de.gif) 分页代码 ![](/icons/6977dou.gif) 和大家分享交流 ![](/icons/6977dou2.gif) 1、DAO层接口 ![](/icons/6977de.gif) 设计 ![](/icons/6977dou.gif) 在MemberDao接口中定义了如下两个思路方法: public erface MemberDao{ //省略了其他 代码 /** *//** * 分页查询 * @param hql 查询 条件 * @param off 开始记录 * @param length 次查询几条记录 * @![](/icons/6977return.gif) */ public List queryForPage(final String hql,final off ,final length); /** *//** * 查询所有记录数 * @param hql 查询 条件 * @ 总记录数 */ public getAllRowCount(String hql); } 2、DAO层实现类MemberDaoImpl对上面两个思路方法 ![](/icons/6977de.gif) 实现如下: public MemberDaoImpl extends HibernateDaoSupport implements MemberDao { //省略了其他 代码 /** *//** * 分页查询 * @param hql 查询 条件 * @param off 开始记录 * @param length 次查询几条记录 * @![](/icons/6977return.gif) */ public List queryForPage(final String hql,final off ,final length){ List list = getHibernateTemplate .executeFind( HibernateCallback { public Object doInHibernate(Session session) throws HibernateException,SQLException{ Query query = session.createQuery(hql); query. FirstResult(off ); query. MaxResults(length); List list = query.list ; list; } }); list; } /** *//** * 查询所有记录数 * @ 总记录数 */ public getAllRowCount(String hql){ getHibernateTemplate .find(hql).size ; } }
细心 ![](/icons/6977de.gif) 读者会发现 ![](/icons/6977dou.gif) 这个类继承了HibernateDaoSupport类 ![](/icons/6977dou.gif) HibernateDaoSupport是Spring提供 ![](/icons/6977de.gif) 对Hibernate支持 ![](/icons/6977de.gif) 类 ![](/icons/6977dou.gif) getHibernateTemplate ![](/icons/6977kh.gif) .executeFind( ![](/icons/6977new.gif) HibernateCallback ![](/icons/6977kh.gif) {....})思路方法中 ![](/icons/6977de.gif) 参数 ![](/icons/6977dou.gif) 我们使用了接口回调 ![](/icons/6977dou.gif) 在其参数内 ![](/icons/6977dou.gif) 我们能像原生 ![](/icons/6977de.gif) Hibernate ![](/icons/6977yi.gif) 样 ![](/icons/6977diaoyong.gif) query. ![](/icons/6977set.gif) FirstResult(off ![](/icons/6977set.gif) )和query. ![](/icons/6977set.gif) MaxResults(length)来实现分页查询功能 ![](/icons/6977dou2.gif) 3、下面我们来新建 ![](/icons/6977yi.gif) 个保存分页信息 ![](/icons/6977de.gif) 类PageBean,具体代码如下: public PageBean { private List list; //要返回 某 页 记录列表 private allRow; //总记录数 private totalPage; //总页数 private currentPage; //当前页 private pageSize; //每页记录数 private boolean isFirstPage; //是否为第 页 private boolean isLastPage; //是否为最后 页 private boolean hasPreviousPage; //是否有前 页 private boolean hasNextPage; //是否有下 页 public List getList { list; } public void List(List list) { this.list = list; } public getAllRow { allRow; } public void AllRow( allRow) { this.allRow = allRow; } public getTotalPage { totalPage; } public void TotalPage( totalPage) { this.totalPage = totalPage; } public getCurrentPage { currentPage; } public void CurrentPage( currentPage) { this.currentPage = currentPage; } public getPageSize { pageSize; } public void PageSize( pageSize) { this.pageSize = pageSize; } /** *//** * 化分页信息 */ public void init { this.isFirstPage = isFirstPage ; this.isLastPage = isLastPage ; this.hasPreviousPage = isHasPreviousPage ; this.hasNextPage = isHasNextPage ; } /** *//** * 以下判断页 信息,只需getter思路方法(is思路方法)即可 * @![](/icons/6977return.gif) */ public boolean isFirstPage { currentPage 1; // 如是当前页是第1页 } public boolean isLastPage { currentPage totalPage; //如果当前页是最后 页 } public boolean isHasPreviousPage { currentPage != 1; //只要当前页不是第1页 } public boolean isHasNextPage { currentPage != totalPage; //只要当前页不是最后1页 } /** *//** * 计算总页数,静态思路方法,供外部直接通过类名![](/icons/6977diaoyong.gif) * @param pageSize 每页记录数 * @param allRow 总记录数 * @ 总页数 */ public countTotalPage(final pageSize,final allRow){ totalPage = allRow % pageSize 0 ? allRow/pageSize : allRow/pageSize+1; totalPage; } /** *//** * 计算当前页开始记录 * @param pageSize 每页记录数 * @param currentPage 当前第几页 * @ 当前页开始记录号 */ public countOff (final pageSize,final currentPage){ final off = pageSize*(currentPage-1); off ; } /** *//** * 计算当前页,若为0或者请求 URL中没有"?page=",则用1代替 * @param page 传入 参数(可能为空,即0,则返回1) * @ 当前页 */ public countCurrentPage( page){ final curPage = (page 0?1:page); curPage; } }
4、Service层接口 ![](/icons/6977de.gif) 设计: public erface MemberService { //省略其他 代码 /** *//** * 分页查询 * @param currentPage 当前第几页 * @param pageSize 每页大小 * @ 封闭了分页信息(包括记录集list) Bean */ public PageBean queryForPage( pageSize, currentPage); } 5、Service层实现类 ![](/icons/6977de.gif) 部分内码如下: public MemberServiceImpl implements MemberService { //通过applicationContext.xml配置文件注入MemberDao 值 private MemberDao memberDao; public void MemberDao(MemberDao memberDao) { this.memberDao = memberDao; } /** *//** * 分页查询 * @param currentPage 当前第几页 * @param pageSize 每页大小 * @ 封闭了分页信息(包括记录集list) Bean */ public PageBean queryForPage( pageSize, page){ final String hql = "from Member"; //查询语句 allRow = memberDao.getAllRowCount(hql); //总记录数 totalPage = PageBean.countTotalPage(pageSize, allRow); //总页数 final off = PageBean.countOff (pageSize, page); //当前页开始记录 final length = pageSize; //每页记录数 final currentPage = PageBean.countCurrentPage(page); List<Member> list = memberDao.queryForPage(hql,off , length); //" 页" 记录 //把分页信息保存到Bean中 PageBean pageBean = PageBean ; pageBean. PageSize(pageSize); pageBean. CurrentPage(currentPage); pageBean. AllRow(allRow); pageBean. TotalPage(totalPage); pageBean. List(list); pageBean.init ; pageBean; }
6、在Struts2中 ![](/icons/6977diaoyong.gif) queryForPageMemberService层 ![](/icons/6977de.gif) queryForPage()思路方法即可 ![](/icons/6977return.gif) ![](/icons/6977yi.gif) 个包含分页信息、符合条件 ![](/icons/6977de.gif) 结果集list ![](/icons/6977dou.gif) 代码如下: public ListMember extends ActionSupport{ //通过applicationContext.xml配置文件注入memberService 值 private MemberService memberService; public void MemberService(MemberService memberService) { this.memberService = memberService; } private page; //第几页 private PageBean pageBean; //包含分布信息 bean public getPage { page; } public void Page( page) { //若URL中无此参数,会默认为第1页 this.page = page; } public PageBean getPageBean { pageBean; } public void PageBean(PageBean pageBean) { this.pageBean = pageBean; } @Override public String execute throws Exception { //分页 pageBean,参数pageSize表示每页显示记录数,page为当前页 this.pageBean = memberService.queryForPage(2, page); SUCCESS; } } 7、最后在listMember.jsp页面中 ![](/icons/6977dou.gif) 用到了Struts2标签: <s:iterator value="pageBean.list"> <s:property value="title"/> <a href="getArticle.action?id=<s:property value="id"/>">mod y</a> <a href="deleteArticle.action?id=<s:property value="id"/>" _disibledevent="http://www.blogjava.net/rongxh7">http://www.blogjava.net/rongxh7
相关文章
读者评论
发表评论
|
|