基于SSH框架的分页Demo,用到了hibernate里的setFirstResult,setMaxResults,每一次重新部署启动Tomcat时候,有些小问题。望解答.
问题一:每次第一次跑项目时候没有分页查询而是查询了全部数据,怎么才能每次进入显示的是分页的查询?
URL:http://localhost:8090/TestPage/
问题二:点击下一页,此时居然是第2页的内容。。。。
问题三:多次点击上一页一直到头,此时有0页面,而我代码里判断了不会出现0页面状况??
我的代码如下:
实体
package Entity;
public class Book {
private int id;
private String title;
private int price;
private String author;
省略setget,和实体映射文件
}
action
package com.action;
import java.util.List;
import Entity.Book;
import Implements.book_Implements;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class BooksAction extends ActionSupport {
private List<Book> bookList;
private book_Implements bi;
private int pageIndex;// 当前的页码
private int pageSize;// 当前显示的条数
省略setget....
@Override
public String execute() throws Exception {
int maxPage = bi.countByPagesSize();
// 上一页到头,不出现0页,最小也是第1页
if (pageIndex <= 0) {
pageIndex = 1;
}
// 下一页到头
if (pageIndex > maxPage) {
pageIndex = maxPage;
}
this.setBookList(bi.selectALL(pageIndex, pageSize));
return "success";
}
}
实现层(Dao)
package Implements;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import Entity.Book;
public class book_Implements {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
*
* @param pageIndex
* :当前的页码
* @param pageSize
* :当前显示的条数
* @return
*/
// 分页查询
public List<Book> selectALL(int pageIndex, int pageSize) {
Session session = sessionFactory.openSession();
Criteria query = session.createCriteria(Book.class);
query.setFirstResult((pageIndex - 1) * pageSize);// 设置第一条记录的位置。
query.setMaxResults(pageSize);// 设置最大返回的记录条数
List<Book> bookList = query.list();
return bookList;
}
/**
* 计算总页数
*
* @return
*/
public int countByPagesSize() {
int pagesize = 3;// 每页显示3条
int maxPage = 0;// 最后一页的页码数
Session session = sessionFactory.openSession();
Criteria query = session.createCriteria(Book.class);
List<Book> bookList = query.list();
int count = bookList.size();// count=数据总数量
// 计算总页数
// 如果求余能算除尽,说明最后一页显示的数据个数就是一页当中显示的个数(3)
if (count % pagesize == 0) {
maxPage = count / pagesize;
} else {
// 求余大于0,说明多留个“小尾巴”
maxPage = (count / pagesize) + 1;
}
return maxPage;
}
}
页面
问题一我自己解决了,但问题二三依然存在,我不知道问题二三这样的会不会放在某些web项目会出现问题,目前我自己做的SSH项目的分页倒还没出现很大问题。当然有更好解决办法也请留言。
问题一:每次第一次跑项目时候没有分页查询而是查询了全部数据,怎么才能每次进入显示的是分页的查询?
解决如下:
action层
问题解决
