对于ssh框架来说的话分页,主要的思想就是dao层完成对数据库的操作,service层对业务进行管理,action对页面进行管理。
分页需要的bean。
- import java.util.List;
- public class PageBean {
- private List 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 List getList() {
- return list;
- }
- public void setList(List list) {
- this.list = list;
- }
- public void setFirstPage(boolean isFirstPage) {
- this.isFirstPage = isFirstPage;
- }
- public void setLastPage(boolean isLastPage) {
- this.isLastPage = isLastPage;
- }
- public void setHasPreviousPage(boolean hasPreviousPage) {
- this.hasPreviousPage = hasPreviousPage;
- }
- public void setHasNextPage(boolean hasNextPage) {
- this.hasNextPage = hasNextPage;
- }
- public int getAllRow() {
- return allRow;
- }
- public void setAllRow(int allRow) {
- this.allRow = allRow;
- }
- public int getTotalPage() {
- return totalPage;
- }
- public void setTotalPage(int totalPage) {
- this.totalPage = totalPage;
- }
- public int getCurrentPage() {
- return currentPage;
- }
- public void setCurrentPage(int currentPage) {
- this.currentPage = currentPage;
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- // /** *//**
- // * 初始化分页信息
- // */
- public void init() {
- this.isFirstPage = isFirstPage();
- this.isLastPage = isLastPage();
- this.hasPreviousPage = isHasPreviousPage();
- this.hasNextPage = isHasNextPage();
- }
- // /** *//**
- // * 以下判断页的信息,只需getter方法(is方法)即可
- // * @return
- // */
- //
- public boolean isFirstPage() {
- return currentPage == 1;// 如是当前页是第1页
- }
- public boolean isLastPage() {
- return currentPage == totalPage;// 如果当前页是最后一页
- }
- public boolean isHasPreviousPage() {
- return currentPage != 1;// 只要当前页不是第1页
- }
- public boolean isHasNextPage() {
- return currentPage != totalPage;// 只要当前页不是最后1页
- } //
- //
- // /** *//**
- // * 计算总页数,静态方法,供外部直接通过类名调用
- // * @param pageSize 每页记录数
- // * @param allRow 总记录数
- // * @return 总页数
- // */
- public static int countTotalPage(final int pageSize, final int allRow) {
- int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow
- / pageSize + 1;
- return totalPage;
- }
- // /** *//**
- // *这个方法的逻辑非常关键,如果不弄清的话,在dao层调用的时候会出现不必要的麻烦。
- // * 计算当前页开始记录
- // * @param pageSize 每页记录数
- // * @param currentPage 当前第几页
- // * @return 当前页开始记录号
- // */
- public static int countOffset(final int pageSize, final int currentPage) {
- int offset = pageSize * (currentPage - 1);
- if(offset<=0){
- return offset = 0;
- }
- 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;
- }
- }
dao层代码:
- package test;
- import java.sql.SQLException;
- import java.util.List;
- import org.hibernate.HibernateException;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.springframework.orm.hibernate3.HibernateCallback;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- public class MemberDaoImpl extends HibernateDaoSupport implements MemberDao {
- /* //实现的接口自己写就可以了
- *//** *//**
- * 分页查询
- * @param hql 查询的条件
- * @param offset 开始记录
- * @param length 一次查询几条记录
- * @return
- *//*
- */
- public List queryForPage(final String hql, final int offset,
- final int length) {
- List list = getHibernateTemplate().executeFind(new HibernateCallback() {
- public Object doInHibernate(Session session) throws
- HibernateException, SQLException {
- Query query = session.createQuery(hql);
- query.setFirstResult(offset);
- query.setMaxResults(length);
- List list = query.list();
- return list;
- }
- });
- return list;
- }
- public int getAllRowCount(String hql) {
- return getHibernateTemplate().find(hql).size();
- }
- }
action:
- public class ListAction extends ActionSupport {
- // 通过applicationContext.xml配置文件注入memberService的值
- private FenyeService fenyeservice ;
- public void setFenyeService (FenyeService fenyeservice ) {
- this.fenyeservice = fenyeservice ;
- }
- public FenyeService getFenyeService (FenyeService fenyeservice ){
- return fenyeservice
- }
- private int page;// 第几页
- private PageBean pageBean;// 包含分布信息的bean
- public int getPage() {
- return page;
- }
- public void setPage(int page) {// 若URL中无此参数,会默认为第1页
- this.page = page;
- }
- public PageBean getPageBean() {
- return pageBean;
- }
- public void setPageBean(PageBean pageBean) {
- this.pageBean = pageBean;
- }
- @Override
- public String execute() throws Exception {
- // 分页的pageBean,参数pageSize表示每页显示记录数,page为当前页
- this.pageBean = fenyeservice .queryForPage(3, page);
- return SUCCESS;
- }
- }
jsp页面的话就是<s:iterator value="pagebean.list">迭代标签了.<s:property value="list内的名字">
差不多就这些了。如果还有什么疑问的话可以给我留言,我尽快给你答复.
转载于:https://blog.51cto.com/3504199/921056