2018-10-10:分頁

分頁

  • 真分頁
    使用特定的sql語句,條件查詢出指定內(nèi)容

  • 假分頁
    數(shù)據(jù)全部取出,在頁面分頁顯示

  • 分頁數(shù)據(jù)
    pageSize maxResults 每頁大小 頁面(用戶提供或默認(rèn)值)提供
    itemCount 總記錄數(shù) 數(shù)據(jù)庫
    offset firstResult 當(dāng)前頁第一條的編號 當(dāng)前顯示第幾頁(用戶) 計算
    pageCount 總頁數(shù) 計算

總頁數(shù) = (總記錄數(shù)+每頁大小 - 1 )/ 每頁大小
當(dāng)前頁第一條的編號 = (當(dāng)前頁編號 - 1) * 每頁大小

  • 分頁完成步驟
  1. hibernate能分頁
    拷貝PageInfo daoimp增加byPage方法 byPage和getAll方法的區(qū)別在與要設(shè)置max和first,要查詢總數(shù)

  2. 頁面輸出能分頁
    action調(diào)用分頁查詢的方法,由于分頁參數(shù)是頁面提供,所以pageInfo 設(shè)置為action的成員變量,getter setter
    list頁面調(diào)用分頁的方法
    瀏覽器地址 輸入list.jsp?pageInfo.firstResult=15&pageInfo.maxResults=5

  3. 使用自定義分頁標(biāo)簽?zāi)芊猪?br> 拷貝分頁標(biāo)簽類 和 分頁標(biāo)簽的tld文件 tld文件放在web-inf 檢查tld文件中類的路徑名稱是否匹配
    list頁面 添加自定義標(biāo)簽的引入
    <%@ taglib prefix="paging" uri="/WEB-INF/paging.tld" %>

記得設(shè)置base標(biāo)簽

<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<s:action name="courseAction_getAllCourse" executeResult="false"
namespace="/" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>" />

拷貝標(biāo)簽的調(diào)用

<tr>
<td colspan="8">
<paging:paging
href="student/list.jsp"
itemCount="{pageInfo.itemCount}" firstResult="{pageInfo.firstResult}"
maxResults="${pageInfo.maxResults}"/>
</td></tr>


PageInfo.java:

package repairsystem.page;


import java.io.Serializable;


public class PageInfo implements Serializable {

    private static final long serialVersionUID = 1878154374135400744L;

    private int firstResult = 0;//當(dāng)前頁第一條編號 

    private int maxResults = 5;//每頁大小

    private int pageCount = 0;//總頁數(shù)

    private transient int itemCount = 0;//總記錄數(shù)
    
    public boolean isPage = false;



    public int getFirstResult() {
        return firstResult;
    }



    public void setFirstResult(int firstResult) {
        this.firstResult = firstResult;
    }



    public int getMaxResults() {
        return maxResults;
    }



    public void setMaxResults(int maxResults) {
        this.maxResults = maxResults;
    }



    public int getPageCount() {
        return pageCount;
    }



    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }



    public boolean isPage() {
        return isPage;
    }



    public void setPage(boolean isPage) {
        this.isPage = isPage;
    }



    public int getItemCount() {
        return itemCount;
    }



    public void setItemCount(int itemCount) {
        this.itemCount = itemCount;
        this.pageCount = (itemCount + maxResults - 1) / maxResults;
    }

    

 
}

PagingTag.java:

package repairsystem.page;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;


/**
 * @author vikings
 *
 */
public class PagingTag extends TagSupport{

    private static final long serialVersionUID = 1L;

    private int maxResults = 5; 
    private int firstResult=0; 
    private int itemCount = 0;
    private String href = null;
        


    
    public int getMaxResults() {
        return maxResults;
    }

    public void setMaxResults(int maxResults) {
        this.maxResults = maxResults;
    }

    public int getFirstResult() {
        return firstResult;
    }

    public void setFirstResult(int firstResult) {
        this.firstResult = firstResult;
    }

    public int getItemCount() {
        return itemCount;
    }

    public void setItemCount(int itemCount) {
        this.itemCount = itemCount;
    }

    public String getHref() {
        return href;
    }

    public void setHref(String href) {
        this.href = href;
    }

    public int doStartTag() throws JspException 
    {
      return SKIP_BODY;
    }
    
    public int doEndTag() throws JspException 
    {   

        
        int totalPages = 0;
        int currentPage=0;

        totalPages = itemCount / maxResults;
        if(itemCount==0||maxResults==0){
          return EVAL_PAGE;
        }
        if (itemCount % maxResults != 0) {
          totalPages = totalPages + 1;
        }
        if (totalPages<=1)
        {
          return EVAL_PAGE;
        }
        currentPage = (firstResult) / maxResults;
        currentPage = currentPage+1;
        StringBuffer navigation = new StringBuffer();
        navigation.append("<li><a>第"+currentPage+"頁/共"+totalPages+"頁</a></li>");
        if (currentPage<=1){
          navigation.append("<li><a>首頁</a></li>");
          navigation.append("<li><a>上一頁</a></li>");
        } else {
          navigation.append("<li><a href='"+href+"?pageInfo.firstResult=0&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>首頁</a></li>");
          navigation.append("&nbsp;");
          navigation.append("<li><a href='"+href+"?pageInfo.firstResult="+(firstResult-maxResults)+"&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>上一頁</a></li>");
        }
        navigation.append("&nbsp;");
        if (currentPage>=totalPages){
          navigation.append("<li><a>下一頁</a></li>");
          navigation.append("&nbsp;");
          navigation.append("<li><a>尾頁</a></li>");
        }else {
          navigation.append("<li><a href='"+href+"?pageInfo.firstResult="+(firstResult+maxResults)+"&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>下一頁</a></li>");
          navigation.append("&nbsp;");
          navigation.append("<li><a href='"+href+"?pageInfo.firstResult="+((totalPages-1)*maxResults)+"&pageInfo.maxResults="+maxResults+"&pageInfo.isPage=true'>尾頁&nbsp;</a></li>");
        }
        try {
            pageContext.getOut().print(navigation.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
       
      return EVAL_PAGE;
    }
    
    public void release() 
    {       
        super.release();
        this.maxResults = 0; //recordsPerPage
        this.firstResult=0; //beginItem
        this.itemCount = 0;
        this.href = null;
    }
}

paging.tld:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
                        "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
 <tlibversion>1.0</tlibversion>
 <jspversion>1.1</jspversion>
 <shortname>Jsp Tag Library</shortname>
   <!--  paging標(biāo)簽,用于顯示一個分頁的公告表格 -->
 <tag>
  <name>paging</name>
  <tagclass>repairsystem.page.PagingTag</tagclass>
  <bodycontent>empty</bodycontent>
  <attribute>
   <name>maxResults</name>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>firstResult</name>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>itemCount</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>href</name>
   <required>true</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
 </tag>
</taglib>

ServicemanDao.java:

    // 分頁查詢
    public List<Serviceman> getServicemanByPage(PageInfo pageInfo) {
        Query query = session.createQuery("From Serviceman");
        List<Serviceman> servicemans = null;
        int itemCount = getItemCount();// 查詢總記錄數(shù)
        pageInfo.setItemCount(itemCount);
        // 總記錄數(shù)大于0,才進(jìn)行分頁
        if (itemCount > 0) {

            query.setMaxResults(pageInfo.getMaxResults());
            query.setFirstResult(pageInfo.getFirstResult());
            servicemans = query.list();

        }
        // HibernateSessionFactory.closeSession();
        return servicemans;

    }
    // 查詢總記錄數(shù)

    public int getItemCount() {
        Query query = session.createQuery("select count(*) From Serviceman");
        int itemCount = Integer.parseInt(query.uniqueResult().toString());
        // HibernateSessionFactory.closeSession();
        return itemCount;

    }

...
ServicemanAction.java:

public class ServicemanAction extends ActionSupport{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private Serviceman serviceman;
    private ServicemanServiceI servicemanServiceI;
    private PageInfo pageInfo;
    
    public ServicemanAction() {
        super();
        servicemanServiceI = new ServicemanService();
        pageInfo = new PageInfo();
    }
    public Serviceman getServiceman() {
        return serviceman;
    }
    public void setServiceman(Serviceman serviceman) {
        this.serviceman = serviceman;
    }
    public ServicemanServiceI getServicemanServiceI() {
        return servicemanServiceI;
    }
    public void setServicemanServiceI(ServicemanServiceI servicemanServiceI) {
        this.servicemanServiceI = servicemanServiceI;
    }
    
    
    public PageInfo getPageInfo() {
        return pageInfo;
    }
    public void setPageInfo(PageInfo pageInfo) {
        this.pageInfo = pageInfo;
    }
    // 得到所有維修人員信息
    public String getServicemanInfo() throws Exception {
        List<Serviceman> servicemans = servicemanServiceI.getServicemanInfo();
        ServletActionContext.getRequest().setAttribute("servicemans", servicemans);
        return null;
    }
    
    // 分頁顯示教師
    public String getServicemanByPage() throws Exception {
        // action依次調(diào)用service dao后得到結(jié)果,再原路返回結(jié)果到了action,再將結(jié)果轉(zhuǎn)發(fā)給頁面
        System.out.println(pageInfo.getFirstResult() + "  " + pageInfo.getMaxResults());
        List<Serviceman> servicemans = servicemanServiceI.getServicemanByPage(pageInfo);
        ServletActionContext.getRequest().setAttribute("servicemans", servicemans);
        ServletActionContext.getRequest().setAttribute("pageInfo", pageInfo);
        return null;
    }

    // 根據(jù)主鍵查詢維修人員
    public String getServicemanInfoBySid() throws Exception {
        Serviceman dbserviceman = servicemanServiceI.getServicemanInfoBySid(serviceman.getSid());
        ServletActionContext.getRequest().setAttribute("serviceman", dbserviceman);
        // System.out.println(dbteacher.getTname());
        return null;
    }

    // 增加維修人員
    public String addServiceman() throws Exception {
        Serializable result = servicemanServiceI.addServiceman(serviceman);
        return null;
    }

    // 修改維修人員信息
    public String updateServiceman() throws Exception {
        Serializable result = servicemanServiceI.updateServiceman(serviceman);
        return null;
    }
}

serviceman.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="paging" uri="/WEB-INF/paging.tld" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";

%>
<s:action name="ServicemanAction_getServicemanInfo" executeResult="false"
                namespace="/" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>" />
<title>test</title>
</head>
<body>
    <s:action name="ServicemanAction_getServicemanByPage" executeResult="false" namespace="/"/>
    <table border="1">
        <tr>
            <td>維修者id</td>
            <td>姓名</td>
            <td>電話</td>
            <td>密碼</td>
            <td>住址</td>
            <td>狀態(tài)</td>
            <td colspan="4">操作</td>
        </tr>
        <s:iterator var="serviceman" value="#request.servicemans">
            <tr>
                <td><s:property value="#serviceman.sid" /></td>
                <td><s:property value="#serviceman.sname" /></td>
                <td><s:property value="#serviceman.sphone" /></td>
                <td><s:property value="#serviceman.spassword" /></td>
                <td><s:property value="#serviceman.saddress" /></td>
                <td><s:property value="#serviceman.sstatus" /></td>
                <td><a href="detail.jsp?sid=${serviceman.sid}">詳情</a></td>
                <td><a href="update.jsp?sid=${serviceman.sid}">修改</a></td>
                <td>刪除</td>
                <td><a href="rob.jsp?sid=${serviceman.sid}">搶單</a></td> 
            </tr>
        </s:iterator>
        <tr>
            <td><a href="add.jsp">增加</a></td>
        </tr>
        <tr>
         <td colspan="8">
           <paging:paging 
           href="Serviceman/serviceman.jsp" 
           itemCount="${pageInfo.itemCount}" 
           firstResult="${pageInfo.firstResult}" 
           maxResults="${pageInfo.maxResults}"/>
         </td>
        </tr>
    </table>
</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaEE三層架構(gòu)實現(xiàn)ajax分頁查詢 開發(fā)環(huán)境: jdk版本:1.7.0 32位 系統(tǒng) window10 ID...
    359afe052eac閱讀 4,795評論 8 22
  • 坦誠者多不老實,老實者多不坦誠
    夢里尋夢閱讀 193評論 0 0
  • 小的時候,我和同齡人一樣,不愛學(xué)習(xí),愛玩,但是我很清楚的知道我要以學(xué)習(xí)為重,因為考不好會被爸媽罵。上初中了,我開始...
    時間有淚_f76閱讀 272評論 0 0
  • 昨天在《領(lǐng)導(dǎo)文萃》看到《衛(wèi)哲跳槽:從小秘到總裁》這篇文章,衛(wèi)哲給曾被稱為“中國證券之父”的萬國證券總經(jīng)理管金生做...
    久違了微笑閱讀 171評論 0 0
  • 蘇庠《鷓鴣天》原詩、注釋、翻譯、賞析 【原文】:鷓鴣天蘇庠楓落河梁野水秋,澹煙衰草接郊丘。醉眠小塢黃茅店①,夢倚高...
    xcy無名閱讀 323評論 0 0

友情鏈接更多精彩內(nèi)容