2018-10-10:分页

分页

  • 真分页
    使用特定的sql语句,条件查询出指定内容

  • 假分页
    数据全部取出,在页面分页显示

  • 分页数据
    pageSize maxResults 每页大小 页面(用户提供或默认值)提供
    itemCount 总记录数 数据库
    offset firstResult 当前页第一条的编号 当前显示第几页(用户) 计算
    pageCount 总页数 计算

总页数 = (总记录数+每页大小 - 1 )/ 每页大小
当前页第一条的编号 = (当前页编号 - 1) * 每页大小

  • 分页完成步骤
  1. hibernate能分页
    拷贝PageInfo daoimp增加byPage方法 byPage和getAll方法的区别在与要设置max和first,要查询总数

  2. 页面输出能分页
    action调用分页查询的方法,由于分页参数是页面提供,所以pageInfo 设置为action的成员变量,getter setter
    list页面调用分页的方法
    浏览器地址 输入list.jsp?pageInfo.firstResult=15&pageInfo.maxResults=5

  3. 使用自定义分页标签能分页
    拷贝分页标签类 和 分页标签的tld文件 tld文件放在web-inf 检查tld文件中类的路径名称是否匹配
    list页面 添加自定义标签的引入
    <%@ taglib prefix="paging" uri="/WEB-INF/paging.tld" %>

记得设置base标签

<%
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%>" />

拷贝标签的调用

<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;//当前页第一条编号 

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

    private int pageCount = 0;//总页数

    private transient int itemCount = 0;//总记录数
    
    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标签,用于显示一个分页的公告表格 -->
 <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();// 查询总记录数
        pageInfo.setItemCount(itemCount);
        // 总记录数大于0,才进行分页
        if (itemCount > 0) {

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

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

    }
    // 查询总记录数

    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依次调用service dao后得到结果,再原路返回结果到了action,再将结果转发给页面
        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;
    }

    // 根据主键查询维修人员
    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>状态</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>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容