首页 »Java教程 » struts2整合spring:Hibernate+Spring+Struts2整合开发中的一个分页显示方案 »正文
struts2整合spring:Hibernate+Spring+Struts2整合开发中的一个分页显示方案
来源: 发布时间:星期五, 2009年1月23日 浏览:282次 评论:0
分页显示 直是web开发中 大烦琐 难题 传统 网页设计只在 个JSP或者ASP页面中书写所有有关数据库操作 代码 那样做分页可能简单 点 但当把网站WebSite分层开发后 分页就比较困难了 下面是我做Spring+Hibernate+Struts2项目时设计 分页代码 和大家分享交流 1、DAO层接口 设计 在MemberDao接口中定义了如下两个思路方法: public erface MemberDao{ //省略了其他代码 /** *//** * 分页查询 * @param hql 查询条件 * @param off 开始记录 * @param length 次查询几条记录 * @ */ public List queryForPage(final String hql,final off,final length); /** *//** * 查询所有记录数 * @param hql 查询条件 * @ 总记录数 */ public getAllRowCount(String hql); } 2、DAO层实现类MemberDaoImpl对上面两个思路方法 实现如下: public MemberDaoImpl extends HibernateDaoSupport implements MemberDao { //省略了其他代码 /** *//** * 分页查询 * @param hql 查询条件 * @param off 开始记录 * @param length 次查询几条记录 * @ */ 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; } }
细心 读者会发现 这个类继承了HibernateDaoSupport类 HibernateDaoSupport是Spring提供 对Hibernate支持 类 getHibernateTemplate .executeFind( HibernateCallback {....})思路方法中 参数 我们使用了接口回调 在其参数内 我们能像原生 Hibernate 样 query. FirstResult(off )和query. MaxResults(length)来实现分页查询功能 3、下面我们来新建 个保存分页信息 类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思路方法)即可 * @ */ public boolean isFirstPage { currentPage 1; // 如是当前页是第1页 } public boolean isLastPage { currentPage totalPage; //如果当前页是最后页 } public boolean isHasPreviousPage { currentPage != 1; //只要当前页不是第1页 } public boolean isHasNextPage { currentPage != totalPage; //只要当前页不是最后1页 } /** *//** * 计算总页数,静态思路方法,供外部直接通过类名 * @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 = (page0?1:page); curPage; } }
4、Service层接口 设计: public erface MemberService { //省略其他代码 /** *//** * 分页查询 * @param currentPage 当前第几页 * @param pageSize 每页大小 * @ 封闭了分页信息(包括记录集list)Bean */ public PageBean queryForPage( pageSize, currentPage); } 5、Service层实现类 部分内码如下: 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中 queryForPageMemberService层 queryForPage()思路方法即可 个包含分页信息、符合条件 结果集list 代码如下: 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页面中 用到了Struts2标签: <s:iterator value="pageBean.list"> <s:property value="title"/> <a href="getArticle.action?id=<s:property value="id"/>">mody</a> <a href="deleteArticle.action?id=<s:property value="id"/>" _disibledevent="http://www.blogjava.net/rongxh7">http://www.blogjava.net/rongxh7
相关文章
读者评论
发表评论
|
|