public class Page {
private String hql = "";
private int totalCount = 0; // 总记录数
private int pageCount = 1; // 每页显示记录数
private int totalPageNum = 1; // 总页数
private int currentPageNum = 1; // 当前页
private boolean hasPreviousPage = false; // 是否有上一页
private boolean hasNextPage = false; // 是否有下一页
public void init(String from, String where, String orderBy, int pageCount) {
this.hql = from + " " + where + " " + orderBy;
this.pageCount = pageCount;
Session session = HibernateSessionFactory.getSession();
this.totalCount = ((Long) session.createQuery(
"select count(*)" + " " + this.hql).uniqueResult()).intValue(); // 计算总记录数
session.close(); // ---------------------------------------------------------
if (this.totalCount % this.pageCount == 0) { // 计算总页数
this.totalPageNum = this.totalCount / this.pageCount;
if (this.totalPageNum == 0) {
this.totalPageNum = 1;
}
} else {
this.totalPageNum = this.totalCount / this.pageCount + 1;
}
if (this.totalPageNum > 1) { // 判断是否有下一页
this.hasNextPage = true;
}
}
public void count() {
Session session = HibernateSessionFactory.getSession();
this.totalCount = ((Long) session.createQuery(
"select count(*)" + " " + this.hql).uniqueResult()).intValue(); // 计算总记录数
session.close();
}
public void pageNum() {
if (this.totalCount % this.pageCount == 0) { // 计算总页数
this.totalPageNum = this.totalCount / this.pageCount;
if (this.totalPageNum == 0) {
this.totalPageNum = 1;
}
} else {
this.totalPageNum = this.totalCount / this.pageCount + 1;
}
}
private List getPageMessage() {
Query query = HibernateSessionFactory.getSession().createQuery(hql);
query.setFirstResult((this.currentPageNum - 1) * this.pageCount);
query.setMaxResults(this.pageCount);
List list = query.list();
return list;
}
public List getPreviousPage() {
if (this.currentPageNum > 1) {
this.currentPageNum = this.currentPageNum - 1;
if (this.currentPageNum > 1) {
this.hasPreviousPage = true;
} else {
this.hasPreviousPage = false;
}
this.hasNextPage = true;
}
return this.getPageMessage();
}
public List getCurrentPage() {
return this.getPageMessage();
}
public List getNextPage() {
if (this.currentPageNum < this.totalPageNum) {
this.currentPageNum = this.currentPageNum + 1;
this.hasPreviousPage = true;
if (this.currentPageNum < this.totalPageNum) {
this.hasNextPage = true;
} else {
this.hasNextPage = false;
}
}
return this.getPageMessage();
}
public List getAppointPage(int appointPage) {
if (appointPage > 0 & appointPage <= this.totalPageNum) {
this.currentPageNum = appointPage;
if (this.currentPageNum > 1) {
this.hasPreviousPage = true;
} else {
this.hasPreviousPage = false;
}
if (this.currentPageNum < this.totalPageNum) {
this.hasNextPage = true;
} else {
this.hasNextPage = false;
}
}
return this.getPageMessage();
}
}
这是我写的一个分页类,不知道为什么每次刷新的时候总是会执行上一次执行的Action,比如:我现在点了“下一页”,它跳到第2页,当我再点“刷新”时,它就跳到第3页了。
[b]问题补充:[/b]
JSP页面:
Action代码:
ActionForward forward = mapping.findForward("downPage");
Collection members = null;
HttpSession session = request.getSession();
Page page = (Page) session.getAttribute("page");
String str = request.getParameter("appointPage");
if (str != "") {
forward = mapping.findForward("goPage");
} else {
members = page.getNextPage();
request.setAttribute("members", members);
}
return forward;
[b]问题补充:[/b]
请求:
http://127.0.0.1:8080/Hzs/action/downPageAction.do?appointPage=
[b]问题补充:[/b]
我知道了每次“刷新”都会把那个上一次的Action再执行一次,但是怎么解决这个问题我就不知道了呀,请大家给点想法。
[b]问题补充:[/b]
如果每次请求都新建一个Page实例的话,那么当前页、总页数等这些信息又放在哪呢?
还有种修改的方法就是不要nextPage这种写法,修改成根据页码来去就好了.刷新的时候页码是不变的.也就不会更新内容了. LZ可以考虑下.
后台逻辑计算错误原因,
你应该在每次请求action时新建一个Page实例,不要把Page 作为action的实例变量
看看你刷新的时候地址栏里面的东西. 呵呵,估计就这个问题.刷新的时候,地址栏里面的响应会再请求一遍. 如果你用了类似?method=getList&page=next之类的东东就自然会加一遍 呵呵. :D 试试看,希望有用!
Page 这个类没有关系,
关键是你的页面URL是什么,贴去来看一下.
一般分页的URL都会带指定页数的
[color=red]Page page = (Page) session.getAttribute("page"); [/color]
不要放到session.
/Hzs/action/downPageAction.do?page=1,
String page = request.getParameter("page");
[quote]http://127.0.0.1:8080/Hzs/action/downPageAction.do?appointPage=*** [/quote]
刷新的时候,地址栏的信息就是上面的吗? 这样的话上面信息又执行了一次. 那样的话按照下面的逻辑自然有取了下一页了哦
[code="java"]
f (str != "") {
forward = mapping.findForward("goPage");
} else {
members = page.getNextPage();
request.setAttribute("members", members);
} [/code]
请LZ打断点,跟踪是否刷新的时候进入到 page.getNextPage();这行.
始终要记住一点,除了登录用户的信息之外,其他数据不要轻易放到session中保存
[url]http://download.csdn.net/source/180694[/url]
禁止刷新啊,要不就在地址栏里面不要放相关地址就OK了.
我常用就是禁止刷新. 简单省事. :D
[color=red]如果每次请求都新建一个Page实例的话,那么当前页、总页数等这些信息又放在哪呢? [/color]
都要算出来