对数据库中的数据进行分页处理的实现

<1>第一部分
<!--分页实现页面booklist.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="/dang/css/common.css"/>
<link rel="stylesheet" type="text/css" href="/dang/css/book.css"/>
<title>图书列表</title>
</head>
<body>
<div class="container">
  <!-- 页面顶部开始 -->
  <div class="top">
    <div  class="header"><%@include file="/jsp/header.jsp"%></div>
    <div class="menu"><%@ include file="/jsp/menu.jsp"%></div>
  </div>
  <!-- 页面顶部结束 -->
  <!-- 页面中间部分开始 -->
  <div class="middle">
    <div class="left">    
    </div>
    <div class="right">
    <!-- 自定义内容开始 -->

<div class="booklist">
<!-- 在页面作用域中放置一个对象books -->
<c:set var="books" value="${pager.pageResult }"/>
<c:forEach items="${books }" var="book"> 
  <!-- book begin -->
  <div class="book">
   <div class="cover">
      <a href='dang/book/todetail.action?bid=${book.bookId }'>      
      <img src='/dang/images/bookcovers/${book.isbn }.jpg'  alt="${book.introduction }" width="128" height="150" border="0"/></a>
   </div>
   <div class="detail">
   <div class="title em">
   <img src="/dang/images/promo.gif" alt="promo" align="middle"/>
   <span><a href="/dang/book/todetail.action?bid=${book.bookId }">${book.title }</a></span>
   </div>
   <div class="more">   
   <span class="em">${book.author }</span>著/出版时间${book.pubDateString }/<span class="em">${book.publisher.pubName }</span><br/>
  <p>
    ${book.introduction }
  </p>
   <!-- 操作区域开始 -->
   <div class="operate">
   <form action="/dang/cart/add.action?bid=${book.bookId }" method="post">                 
       <span class="price1">¥
        ${book.price }
       </span>&nbsp;&nbsp;
       <span class="price2">¥
         ${book.dangPrice }
       </span>&nbsp;&nbsp;
    <input align="middle" type="image" src="/dang/images/btn_buy.gif" alt="购买">
     &nbsp;
   </form>   
      </div>
      <!-- 操作区域结束 -->
    </div>
    </div> 
  </div>
  <!-- div book end -->
</c:forEach>
 <div>
 <div class="pager">
 <form action="/dang/book/tolist.action" method="post">
    总共-${pager.recordCount}-条记录&nbsp;&nbsp;当前页:<font color="red">${ pager.pageNo}</font>/${pager.pageCount }&nbsp;&nbsp;
   <c:if test="${pager.first }">
    首页&nbsp;&nbsp;上一页
   </c:if>
   <c:if test="${!pager.first }">
   <a href="/dang/book/tolist.action?pageNo=${1}">首页</a>&nbsp;&nbsp;
  <a href="/dang/book/tolist.action?pageNo=${pager.pageNo-1 }">上一页</a>&nbsp;&nbsp;
  </c:if>
  <c:if test="${pager.last }">
   下一页&nbsp;&nbsp;末页
  </c:if>
  <c:if test="${!pager.last }">
  <a href="/dang/book/tolist.action?pageNo=${pager.pageNo+1 }">下一页</a>&nbsp;&nbsp;
  <a href="/dang/book/tolist.action?pageNo=${pager.pageCount }">末页</a>&nbsp;&nbsp;
  </c:if>
  <input size="1" type="text" name="pageNo" id="pageNo" value="${ pager.pageNo}">
  <input  type="submit" value="go">
 </form>
 </div>
</div>
    <!-- 自定义内容结束 -->
    </div>
  </div>
  <!-- 页面中间部分结束 -->
</div>
</div>
</body>
</html>


<2>用实体类(domain)封装分页对象
package com.tarena.common.page;
import java.io.Serializable;
import java.util.List;
/**
 * 分页类,封装与分页有关方法
 * @author Jimmy
 *
 * @param <T> 泛型,用于存放需要进行分页的对象
 */
public class Pager<T> implements Serializable{
 /**
  *
  */
 private static final long serialVersionUID = -916738496189705077L;
 private int pageNo;//页码,从1开始
 private int pageSize;//每页条数
 private int recordCount;//总记录数
 private int pageCount;//总页数,只读
 private boolean first;//是否为第一页,只读
 private boolean last;//是否为最后一页,只读
 private List<T> pageResult;//当前分页数据
 public Pager(){}
 public Pager(int pageSize,int pageNo,int recordCount,List<T> pageResult){
  this.pageSize = pageSize;
  this.pageNo = pageNo;
  this.recordCount = recordCount;
  this.pageResult = pageResult;
 }
 public int getPageNo() {
  return pageNo;
 }
 public void setPageNo(int pageNo) {
  this.pageNo = pageNo;
 }
 public int getPageSize() {
  return pageSize;
 }
 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }
 public int getRecordCount() {
  return recordCount;
 }
 public void setRecordCount(int recordCount) {
  this.recordCount = recordCount;
 }
 public List<T> getPageResult() {
  return pageResult;
 }
 public void setPageResult(List<T> pageResult) {
  this.pageResult = pageResult;
 }
 public int getPageCount() {
  int a = recordCount%pageSize;
  int b = recordCount/pageSize;
  pageCount = a==0 ? b : b+1;
  return pageCount;
 }
 public boolean isFirst() {
  first = pageNo == 1;
  return first;
 }
 public boolean isLast() {
  last = pageNo == pageCount;
  return last;
 }
 
}

 

<3>通过Struts2.0的Action对逻辑进行处理和转发
package com.tarena.dang.book.action;

import java.util.List;
import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.tarena.common.constant.Constants;
import com.tarena.common.page.Pager;
import com.tarena.dang.book.service.BookService;
import com.tarena.dang.book.service.BookServiceImpl;
import com.tarena.dang.domain.Book;
/**
 * 实现对Book对象的数据处理和转发
 * @author JimmyZhang
 * @since 2012.5.10
 */
public class BookAction {
 private BookService bookService;
 private Book book;
 public Book getBook() {
  return book;
 }
 public void setBook(Book book) {
  this.book = book;
 }
 public BookAction(){
  bookService = new BookServiceImpl();
 }
 
 //显示图书列表以及实现分页功能
 public String tolist() throws Exception{
  System.out.println("调用【tolist】方法:");
  //获取ActionContext对象
  ActionContext ac = ActionContext.getContext();
  //定义Pager对象
  Pager<Book> pager = new Pager<Book>();
  //接收请求参数pageNo
  String[] values =
 (String[])ac.getParameters().get("pageNo");
  int pageNo = 1;
  if(values!=null){
   pageNo=Integer.parseInt(values[0]);
  };
  //获取pageNo的List<Book>,每页两条
  List<Book> list = bookService.getBooks(pageNo,Constants.PAGE_SIZE);
  //获取总记录数
  int recordCount = bookService.getBooksCount();
  //设置pager对象
  pager.setPageNo(pageNo);//页码
  pager.setPageSize(Constants.PAGE_SIZE);//每页大小
  pager.setRecordCount(recordCount);//总记录数
  pager.setPageResult(list);//分页数据
  //将分页数据pager保存在request作用域中
  ac.put("pager", pager);
  System.out.println("【BookAction-tolist】获取第"+pageNo+"页的分页数据");
  return "list";
 }
 
 //显示图书详细信息
 public String todetail() throws Exception{
  System.out.println("【todetail】");
  ActionContext ac = ActionContext.getContext();
  //接收请求参数bid
  //key-请求参数名称,   value-String[]
  Map<String,Object> values
        =ac.getParameters();
  Object value=values.get("bid");
        String bookId=((String[])value)[0];
        //获取对应Book对象
        book = bookService.getBookById(Integer.parseInt(bookId));
        //将Book对象那个保存在请求作用域中
        ac.put("book", book);
  return "detail";//请求转发进行跳转 
 }
}

 

补充:
struts.xml的配置信息

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
     <package name="book" namespace="/book" extends="struts-default">
      <!-- 配置MyLogInterceptor拦截器 -->
      <interceptors>
       <interceptor name="mylog2"
        class="com.tarena.dang.interceptor.MyLogInterceptor2">
        <!-- 只针对todetail方法进行拦截 -->
        <param name="includeMethods" >todetail</param>
       </interceptor>
       <interceptor name="mylog"
        class="com.tarena.dang.interceptor.MyLogInterceptor">
        <param name="pattern" >yyyy/MM/dd HH:mm:ss</param>
       </interceptor>
      </interceptors>
      
      <!-- 配置通用BookAction -->
      <action name="*" method="{1}"
       class="com.tarena.dang.book.action.BookAction">
       <interceptor-ref name="defaultStack"/>
       <interceptor-ref name="mylog"/>
       <interceptor-ref name="mylog2"/>
       <result name="list">/jsp/book/booklist.jsp</result>
       <result name="detail">/jsp/book/bookdetail.jsp</result>
      </action>
     </package>
</struts>   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值