看到网上讲解的分页查询不少,针对SSH的却不多,故而把自己做的过程贴出来:
1.首先 咱得先有个pageBean 存放各种页面信息 如当前页码 每一页几个字段之类 贴代码如下:
public class PageBean { private List<CrmPost> list; //要返回的某一页记录列表 private int allRow; //总记录数 private int totalPage; //总页数 private int currentPage; //当前页 private int pageSize; //每页的记录数 private boolean isFirstPage; //是否为当前第一页 private boolean isLastPage; //是否为最后一页 private boolean hasPreviousPage; //是否有前一页 private boolean hasNextPage; //是否有下一页 /** * 初始化分页信息 */ public void init(){ this.isFirstPage = isFirstPage; this.isLastPage = isLastPage; this.hasPreviousPage = hasPreviousPage; this.hasNextPage = hasNextPage; } /** * 计算总页数 静态方法 * @param pageSize 每页的记录数 * @param allRow 总记录数 * @return 总页数 */ public static int countTatalPage(final int pageSize,final int allRow){ int toalPage = allRow % pageSize == 0 ? allRow/pageSize : allRow/pageSize + 1; return toalPage; } /** * 计算当前页开始的记录 * @param pageSize 每页记录数 * @param currentPage 当前第几页 * @return 当前页开始记录号 */ public static int countOffset(final int pageSize,final int currentPage){ final int offset = pageSize * (currentPage - 1); return offset; } /** * 计算当前页,若为0或者请求的URL中没有“?page = ”则用1代替 * @param page 传入的参数(可能为空,即0 则返回1) * @return */ public static int countCurrentPage(int page){ final int curpage = (page == 0 ? 1 : page); return curpage; } /** 每个属性的set/get方法省略
}
2.然后先说下jsp页面部分
<s:iterator value="#session.pageBean"> <table border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td align="right"> <span>第<s:property value="currentPage"/> 页/共<s:property value="totalPage"/>页</span> <span> <s:if test="%{currentPage==1}"> [首页] [上一页] </s:if> <s:else> <a href="action?page=1">[首页]</a> <a href="action?page=<s:property value="%{currentPage-1}"/>"> [上一页]</a> </s:else> <s:if test="%{currentPage != totalPage}"> <a href="action?page=<s:property value="%{currentPage+1}"/>">[下一页]</a> <a href="action?page=<s:property value="totalPage"/>">[尾页]</a> </s:if> <s:else> [下一页] [尾页] </s:else> </span> </td> </tr> </table> </s:iterator>
主要是其中的判断,其实意思很简单 判断现在是不是第一页(首页) 首页得话 我就不让你点击上一页 和首页标识
再判断是不是尾页 尾页得话就不让你点击下一页和尾页标识
正常页码(第一页可以点击下一页,尾页可以点击上一页)的话,点击上一页,把currentPage(pageBean
里当前页码的属性)-1作为参数传给action 下一页就是currentPage+1作为参数传给
3 再说下action里 其中最重要的参数就是 int page = 1;了 他是运用动态参数封装中属性驱动的普通属性方法
从jsp取值,默认为1,就是说第一次登录就看第一页 当然你也可以默认3 4 5 ...贴代码:
public class PageAction extends ActionSupport{ @Qualifier("postService") @Autowired private PostService postService; private PageBean pageBean; private List<CrmPost> postList; private int page = 1; public String execute()throws Exception{ pageBean = postService.queryForPage(2, page);//获取封装了分页信息和数据的pageBean postList = pageBean.getList(); //获取数据 System.out.println("我就看看"+pageBean.getCurrentPage()); //当前页要显示的 这一步是我工程的代码需要 童鞋们直接putpageBean//就好 其中已经封装了list 可以在jsp页面自行取值 ActionContext.getContext().getSession().put("CrmPost",postList); //pageBean ActionContext.getContext().getSession().put("pageBean",pageBean); return SUCCESS; }/**依然省略get/set }然后是service层,我再这一层里跟pageBean的逻辑运算们交互 set进各种数据 得到针对当前页完整的一个
pageBean 方法为:
@Override public PageBean queryForPage(int pageSize, int page) { System.out.println("每页几个"+pageSize+"和当前页码"+page); //总记录的数 调用另一个方法getAmount() (调用DAO得到PO的所有信息.size就是个数)获得总信息个数allRow int allRow = getAmount(); //总页数 int tatalPage = PageBean.countTatalPage(pageSize, allRow); //当前页开始记录数 int offset = PageBean.countOffset(pageSize, page); //每页记录数 pageSize //当前页 currenPage int currentPage = PageBean.countCurrentPage(page); // 调用 得到要显示的那几个CrmPost 放进一个集合 List<CrmPost> list = postDao.queryForPage(offset, pageSize); //把分页信息保存到Bean当中 PageBean pageBean = new PageBean(); pageBean.setPageSize(pageSize); pageBean.setCurrentPage(currentPage); pageBean.setAllRow(allRow); pageBean.setTotalPage(tatalPage); pageBean.setList(list); pageBean.init(); return pageBean; }最后的dao层获得的应该是jsp中当前页面要显示的 我在用getHibernateTemple()时候 如网上说的
(Number)getHibernateTemplate.find("select count(*) from 对象类").
listIterator().next()).intValue();
最后的.intValue()并没有联想 所以我换成跟平时写的hql语句不同的,通过query直接获取,方法代码:
/** * 分页查询 * 查询条件 * @param offset 开始记录 * @param length 一次查询几条记录 * @return 查询的记录集合 */ @Override public List<CrmPost> queryForPage(int offset, int length) { Session session = getSessionFactory().openSession(); Query q = session.createQuery("from CrmPost"); q.setFirstResult(offset); q.setMaxResults(length); List<CrmPost> list = q.list(); return list; }至此一个分页就完成了,大家闲暇之时不妨自己玩玩儿~~