想请教个 关于 分页问题, 我用 struts 做分页, 我是先吧 当前页 用 Session 存着,然后点下一页的时候 再从 Session中
出来 加1,这样实现转到下一页, 但是我感觉这样做不怎么科学,希望有朋友能提出宝贵的意见。。。在此 先谢了.
分页源代码
//分页核心代码 JavaBean
package com.shopping.po;
/**
*/
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">
订单编号 | 商品编号 | 名称 | 价格 | 数量 | 总金额 | 操作 |
<%=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就不叫分页了,根本没有减少数据库负担? 伪分野?