论坛经典分页

想请教个 关于 分页问题, 我用 struts 做分页, 我是先吧 当前页 用 Session 存着,然后点下一页的时候 再从 Session中
出来 加1,这样实现转到下一页, 但是我感觉这样做不怎么科学,希望有朋友能提出宝贵的意见。。。在此 先谢了.

分页源代码
//分页核心代码 JavaBean
package com.shopping.po;

/**

  • @author TanJianyong
  • */
    public class PageBean {

    private int currentPage = 0; // 当前页

    private int pageSize = 0; // 每一页显示数据行

    private int totalPage = 0; // 总页数

    private int totalRows = 0; // 总行数

    private int startNum = 0; // 开始指针控制

    private int endNum = 0; // 结束指针控制

    // private static final int PAGESIZE = 10; // 每页显示的行数

    private boolean hasNextPage = false; // 是否有下一页

    private boolean hasPrevPage = false; // 是否有上一页

    private int prevPage = 0; // 下一页

    private int nextPage = 0; // 上一页

    //private PageBean pageBean;

    public PageBean(int totalRows, int currentPage, int pageSize) {

    this.totalRows = totalRows;
    this.currentPage = currentPage;
    this.pageSize = pageSize;
    this.countTotalPage();
    this.initNum();
    

    }

    public void countTotalPage() {

    if (totalRows % pageSize == 0) {
        this.totalPage = totalRows / pageSize;
    } else {
        this.totalPage = totalRows / pageSize + 1;
    }
    

    }

    public void initNum() {

    if (currentPage > 0 && currentPage < totalPage) {
        this.endNum = pageSize * currentPage;
        this.startNum = (currentPage - 1) * pageSize + 1;
        this.hasNextPage = true;
        this.hasPrevPage = true;
    }
    if (currentPage <= 0) {
        currentPage = 1;
        this.endNum = pageSize;
        this.startNum = 1;
        // this.endNum = currentPage*pageSize;
        // this.startNum = (currentPage-1)*pageSize+1;
        this.hasPrevPage = false;
        this.hasNextPage = true;
    }
    if (currentPage >= totalPage) {
        this.endNum = totalRows;
        this.startNum = pageSize * (totalPage - 1) + 1;
        this.hasNextPage = false;
        this.hasPrevPage = true;
    }
    

    }

    public void setCurrentPage(int currentPage) {

    this.currentPage = currentPage;
    

    }

    public int getCurrentPage() {

    return currentPage;
    

    }

    public void setTotalPage(int totalPage) {

    this.totalPage = totalPage;
    

    }

    public int getTotalPage() {

    return totalPage;
    

    }

    public void setPageSize(int pageSize) {

    this.pageSize = pageSize;
    

    }

    public int getPageSize() {

    return pageSize;
    

    }

    public void setStartNum(int startNum) {

    this.startNum = startNum;
    

    }

    public int getStartNum() {

    return startNum;
    

    }

    public void setEndNum(int endNum) {

    this.endNum = endNum;
    

    }

    public int getEndNum() {

    return endNum;
    

    }

    public void setHasNextPage(boolean hasNextPage) {

    this.hasNextPage = hasNextPage;
    

    }

    public boolean isHasNextPage() {

    return hasNextPage;
    

    }

    public void setHasPrevPage(boolean hasPrevPage) {

    this.hasPrevPage = hasPrevPage;
    

    }

    public boolean isHasPrevPage() {

    return hasPrevPage;
    

    }

    public int getPrevPage() {

    if (this.isHasPrevPage()) {
        prevPage = this.currentPage - 1;
    } else {
        prevPage = this.currentPage;
    }
    return prevPage;
    

    }

    public int getNextPage() {

    if (this.isHasNextPage()) {
        nextPage = this.currentPage + 1;
    } else {
        nextPage = this.currentPage;
    }
    return nextPage;
    

    }

}
//jsp显示分页效果
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.util.*,com.shopping.po.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



——Shopping 管理系统——

<br> function deleteOrder(orderId)<br> {<br> var order_id = 3;<br> if(confirm(&quot;确定要删除此订单吗?&quot;))<br> {<br> window.location.href= &quot;deleteorder.action?order_id=&quot;+order_id+&quot;&amp;id=&quot;+orderId;<br> }<br> }<br>



<%
String order_id = (String) session.getAttribute("order_id");
ArrayList list = (ArrayList) session.getAttribute("order");
PageBean pages = (PageBean) session.getAttribute("page");
int totalPage = pages.getTotalPage();
int currentPage = pages.getCurrentPage();
int nextPage = pages.getNextPage();
int prevPage = pages.getPrevPage();
%>







订单删除系统


align="center">









<%
ListIterator it = list.listIterator();
while (it.hasNext()) {
Order order = it.next();
%>















订单编号

商品编号

名称

价格

数量

总金额

操作

<%=order.getOrderId()%>

<%=order.getProductId()%>

<%=order.getProductName()%>

¥ <%=order.getPrice()%>

<%=order.getQuantity()%>

¥ <%=order.getTotal()%>

<!--
&id=<%=order.getOrderId() %>">删 除
-->
style="border: 1px solid #9BCFF1">

当前页数[<%=currentPage%>/共<%=totalPage%>页]

&pageNo=<%=prevPage%>">上一页

href="vieworder.action?order_id=&pageNo=<%=nextPage%>">下一页

href="vieworder.action?order_id=&pageNo=<%=totalPage%>">最后一页

返 回





//Struts2来控制分页
package com.shopping.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.shopping.dao.impl.GenericTable;
import com.shopping.dbc.PageNum;
import com.shopping.po.Order;
import com.shopping.po.PageBean;
import com.shopping.service.OrderService;

public class AdminOrderAction extends ActionSupport {

private static final long serialVersionUID = -5104208146707839759L;

private static final int pageSize = 6; // 每页显示行数

private static final String SELECT = "select"; // 查询页面

private static final String DELETE = "delete"; // 删除页面

// 查询订单信息
public String viewOrder() throws Exception {

    HttpServletRequest request = ServletActionContext.getRequest();
    String order_id = request.getParameter("order_id");
    int pageNo = PageNum.getCurrentPage(request.getParameter("pageNo"));
    OrderService service = new OrderService();
    int count = GenericTable.getTotalRows(2);
    PageBean page = new PageBean(count, pageNo, pageSize);
    List<Order> list = service.findAllOrder(page);
    request.getSession().setAttribute("order", list);
    request.getSession().setAttribute("page", page);
    request.getSession().setAttribute("order_id", order_id);
    if (order_id.equals("1")) {
        return SELECT;
    } else {
        return DELETE;
    }
}

// 根据订单号来查询
public String selectOrder() throws Exception {

    HttpServletRequest request = ServletActionContext.getRequest();
    String orderId = request.getParameter("orderId");
    if ("".equals(orderId) || orderId == "") {
        return SELECT;
    } else {
        OrderService service = new OrderService();
        List<Order> list = service.findByOrder(orderId);
        request.getSession().setAttribute("order", list);
        return SELECT;
    }
}

// 根据订单号删除
public String deleteOrder() throws Exception {

    // 获取订单号
    String id = ServletActionContext.getRequest().getParameter("id");
    OrderService service = new OrderService();
    service.deleteOrder(id);
    return this.viewOrder();
}

}

不用session吧,当你生成导航时把URL写入该导航,当用户点击该链接就把参数传给服务器,你只要把“第几页”提取出来就可以了~
例如:
你要做列出用户User的分页,那么你就把导航1的url设置为<a href="xxx/xxx/user?page=1",你在action里取到了page=1就传参数给业务层吧。生产sql如下(mysql为例):select * from user limit 1,10,这样就显示1~10条了,也就是第一页。

哥们,这样做不好,最好是放着链接里面,传参过去,放SESSION里面不好,不要什么都放在SESSION里面

SESSION不是狗皮膏药

哥们,这样做不好,最好是放着链接里面,传参过去,放SESSION里面不好,不要什么都放在SESSION里面
leonelwong (资深程序员) 2009-02-27

同上

做成link
比如http://.../...?index=...
index表示当前页
这样比较好

放在session就不叫分页了,根本没有减少数据库负担? 伪分野?