zoukankan      html  css  js  c++  java
  • SSM项目中表单分页操作(PageHepler使用)

    Maven pom.xml添加依赖

    <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
    </dependency>
    1
    2
    3
    4
    5
    applicationContext.xml中 SqlSessionFactoryBean中添加拦截器数据库可以更换我用的是mysql数据库,使用其他数据库将mysql更换成其他数据库即可。

    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <!-- 传入PageHelper的插件 -->
    <property name="plugins">
    <array>
    <!-- 传入插件的对象 -->
    <bean class="com.github.pagehelper.PageInterceptor">
    <property name="properties">
    <props>
    <prop key="helperDialect">mysql</prop>
    <prop key="reasonable">true</prop>
    </props>
    </property>
    </bean>
    </array>
    </property>
    </bean>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    下面就可以使用分页了,需要在serviceImpl调用dao层代码的上一行添加
    PageHelper.startPage(pageNum,pageSize);

    @Override
    public List<Syslog> selAll(Integer pageNum, Integer pageSize) {
    PageHelper.startPage(pageNum,pageSize);
    return iSysLogDao.selAll();
    }
    1
    2
    3
    4
    5
    controller层需要将信息储存在PageInfo这个对象中

    @RequestMapping("/show")
    public ModelAndView show(@RequestParam(defaultValue = "1",required = true) Integer pageNum,@RequestParam(defaultValue = "10",required = true) Integer pageSize){
    ModelAndView modelAndView=new ModelAndView("syslog-list");
    List<Syslog> syslogList=iSysLogService.selAll(pageNum,pageSize);
    PageInfo pageInfo=new PageInfo(syslogList);
    modelAndView.addObject("pageInfo",pageInfo);

    return modelAndView;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    需要注意在前端调用pageInfo.list

    <c:forEach items="${pageInfo.list}" var="syslog">
    <tr>
    <td><input name="ids" type="checkbox"></td>
    <td>${syslog.id}</td>
    <td>${syslog.visitTimeStr }</td>
    <td>${syslog.username }</td>
    <td>${syslog.ip }</td>
    <td>${syslog.url}</td>
    <td>${syslog.executionTime}毫秒</td>
    <td>${syslog.method}</td>
    </tr>
    </c:forEach>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    pageInfo封装了分页信息,可以直接使用,

    <div class="box-tools pull-right">
    <ul class="pagination">
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=1&pageSize=${pageInfo.pageSize}" aria-label="Previous">首页</a></li>
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageInfo.pageNum-1}&pageSize=${pageInfo.pageSize}">上一页</a></li>
    <c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageNum}&pageSize=${pageInfo.pageSize}">${pageNum}</a></li>
    </c:forEach>
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageInfo.pageNum+1}&pageSize=${pageInfo.pageSize}">下一页</a></li>
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageInfo.pages}&pageSize=${pageInfo.pageSize}" aria-label="Next">尾页</a></li>
    </ul>
    </div>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    下面是PageInfo源代码

    /*
    * The MIT License (MIT)
    *
    * Copyright (c) 2014-2017 abel533@gmail.com
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    package com.github.pagehelper;

    import java.io.Serializable;
    import java.util.Collection;
    import java.util.List;

    /**
    * 对Page<E>结果进行包装
    * <p/>
    * 新增分页的多项属性,主要参考:http://bbs.csdn.net/topics/360010907
    *
    * @author liuzh/abel533/isea533
    * @version 3.3.0
    * @since 3.2.2
    * 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
    */
    @SuppressWarnings({"rawtypes", "unchecked"})
    public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;

    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"

    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;

    //前一页
    private int prePage;
    //下一页
    private int nextPage;

    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
    //导航条上的第一页
    private int navigateFirstPage;
    //导航条上的最后一页
    private int navigateLastPage;

    public PageInfo() {
    }

    /**
    * 包装Page对象
    *
    * @param list
    */
    public PageInfo(List<T> list) {
    this(list, 8);
    }

    /**
    * 包装Page对象
    *
    * @param list page结果
    * @param navigatePages 页码数量
    */
    public PageInfo(List<T> list, int navigatePages) {
    if (list instanceof Page) {
    Page page = (Page) list;
    this.pageNum = page.getPageNum();
    this.pageSize = page.getPageSize();

    this.pages = page.getPages();
    this.list = page;
    this.size = page.size();
    this.total = page.getTotal();
    //由于结果是>startRow的,所以实际的需要+1
    if (this.size == 0) {
    this.startRow = 0;
    this.endRow = 0;
    } else {
    this.startRow = page.getStartRow() + 1;
    //计算实际的endRow(最后一页的时候特殊)
    this.endRow = this.startRow - 1 + this.size;
    }
    } else if (list instanceof Collection) {
    this.pageNum = 1;
    this.pageSize = list.size();

    this.pages = this.pageSize > 0 ? 1 : 0;
    this.list = list;
    this.size = list.size();
    this.total = list.size();
    this.startRow = 0;
    this.endRow = list.size() > 0 ? list.size() - 1 : 0;
    }
    if (list instanceof Collection) {
    this.navigatePages = navigatePages;
    //计算导航页
    calcNavigatepageNums();
    //计算前后页,第一页,最后一页
    calcPage();
    //判断页面边界
    judgePageBoudary();
    }
    }

    /**
    * 计算导航页
    */
    private void calcNavigatepageNums() {
    //当总页数小于或等于导航页码数时
    if (pages <= navigatePages) {
    navigatepageNums = new int[pages];
    for (int i = 0; i < pages; i++) {
    navigatepageNums[i] = i + 1;
    }
    } else { //当总页数大于导航页码数时
    navigatepageNums = new int[navigatePages];
    int startNum = pageNum - navigatePages / 2;
    int endNum = pageNum + navigatePages / 2;

    if (startNum < 1) {
    startNum = 1;
    //(最前navigatePages页
    for (int i = 0; i < navigatePages; i++) {
    navigatepageNums[i] = startNum++;
    }
    } else if (endNum > pages) {
    endNum = pages;
    //最后navigatePages页
    for (int i = navigatePages - 1; i >= 0; i--) {
    navigatepageNums[i] = endNum--;
    }
    } else {
    //所有中间页
    for (int i = 0; i < navigatePages; i++) {
    navigatepageNums[i] = startNum++;
    }
    }
    }
    }

    /**
    * 计算前后页,第一页,最后一页
    */
    private void calcPage() {
    if (navigatepageNums != null && navigatepageNums.length > 0) {
    navigateFirstPage = navigatepageNums[0];
    navigateLastPage = navigatepageNums[navigatepageNums.length - 1];
    if (pageNum > 1) {
    prePage = pageNum - 1;
    }
    if (pageNum < pages) {
    nextPage = pageNum + 1;
    }
    }
    }

    /**
    * 判定页面边界
    */
    private void judgePageBoudary() {
    isFirstPage = pageNum == 1;
    isLastPage = pageNum == pages || pages == 0;;
    hasPreviousPage = pageNum > 1;
    hasNextPage = pageNum < pages;
    }

    public int getPageNum() {
    return pageNum;
    }

    public void setPageNum(int pageNum) {
    this.pageNum = pageNum;
    }

    public int getPageSize() {
    return pageSize;
    }

    public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
    }

    public int getSize() {
    return size;
    }

    public void setSize(int size) {
    this.size = size;
    }

    public int getStartRow() {
    return startRow;
    }

    public void setStartRow(int startRow) {
    this.startRow = startRow;
    }

    public int getEndRow() {
    return endRow;
    }

    public void setEndRow(int endRow) {
    this.endRow = endRow;
    }

    public long getTotal() {
    return total;
    }

    public void setTotal(long total) {
    this.total = total;
    }

    public int getPages() {
    return pages;
    }

    public void setPages(int pages) {
    this.pages = pages;
    }

    public List<T> getList() {
    return list;
    }

    public void setList(List<T> list) {
    this.list = list;
    }

    @Deprecated
    // firstPage就是1, 此函数获取的是导航条上的第一页, 容易产生歧义
    public int getFirstPage() {
    return navigateFirstPage;
    }

    @Deprecated
    public void setFirstPage(int firstPage) {
    this.navigateFirstPage = firstPage;
    }

    public int getPrePage() {
    return prePage;
    }

    public void setPrePage(int prePage) {
    this.prePage = prePage;
    }

    public int getNextPage() {
    return nextPage;
    }

    public void setNextPage(int nextPage) {
    this.nextPage = nextPage;
    }

    @Deprecated
    // 请用getPages()来获取最后一页, 此函数获取的是导航条上的最后一页, 容易产生歧义.
    public int getLastPage() {
    return navigateLastPage;
    }

    @Deprecated
    public void setLastPage(int lastPage) {
    this.navigateLastPage = lastPage;
    }

    public boolean isIsFirstPage() {
    return isFirstPage;
    }

    public void setIsFirstPage(boolean isFirstPage) {
    this.isFirstPage = isFirstPage;
    }

    public boolean isIsLastPage() {
    return isLastPage;
    }

    public void setIsLastPage(boolean isLastPage) {
    this.isLastPage = isLastPage;
    }

    public boolean isHasPreviousPage() {
    return hasPreviousPage;
    }

    public void setHasPreviousPage(boolean hasPreviousPage) {
    this.hasPreviousPage = hasPreviousPage;
    }

    public boolean isHasNextPage() {
    return hasNextPage;
    }

    public void setHasNextPage(boolean hasNextPage) {
    this.hasNextPage = hasNextPage;
    }

    public int getNavigatePages() {
    return navigatePages;
    }

    public void setNavigatePages(int navigatePages) {
    this.navigatePages = navigatePages;
    }

    public int[] getNavigatepageNums() {
    return navigatepageNums;
    }

    public void setNavigatepageNums(int[] navigatepageNums) {
    this.navigatepageNums = navigatepageNums;
    }

    public int getNavigateFirstPage() {
    return navigateFirstPage;
    }

    public int getNavigateLastPage() {
    return navigateLastPage;
    }

    public void setNavigateFirstPage(int navigateFirstPage) {
    this.navigateFirstPage = navigateFirstPage;
    }

    public void setNavigateLastPage(int navigateLastPage) {
    this.navigateLastPage = navigateLastPage;
    }

    @Override
    public String toString() {
    final StringBuffer sb = new StringBuffer("PageInfo{");
    sb.append("pageNum=").append(pageNum);
    sb.append(", pageSize=").append(pageSize);
    sb.append(", size=").append(size);
    sb.append(", startRow=").append(startRow);
    sb.append(", endRow=").append(endRow);
    sb.append(", total=").append(total);
    sb.append(", pages=").append(pages);
    sb.append(", list=").append(list);
    sb.append(", prePage=").append(prePage);
    sb.append(", nextPage=").append(nextPage);
    sb.append(", isFirstPage=").append(isFirstPage);
    sb.append(", isLastPage=").append(isLastPage);
    sb.append(", hasPreviousPage=").append(hasPreviousPage);
    sb.append(", hasNextPage=").append(hasNextPage);
    sb.append(", navigatePages=").append(navigatePages);
    sb.append(", navigateFirstPage=").append(navigateFirstPage);
    sb.append(", navigateLastPage=").append(navigateLastPage);
    sb.append(", navigatepageNums=");
    if (navigatepageNums == null) sb.append("null");
    else {
    sb.append('[');
    for (int i = 0; i < navigatepageNums.length; ++i)
    sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]);
    sb.append(']');
    }
    sb.append('}');
    return sb.toString();
    }
    }

    --------------------- 

  • 相关阅读:
    Java [Leetcode 319]Bulb Switcher
    Java [Leetcode 122]Best Time to Buy and Sell Stock II
    谱聚类算法
    Java [Leetcode 238]Product of Array Except Self
    Java [Leetcode 260]Single Number III
    X++ StrFix方法
    D365 FO第三方访问https证书问题
    D365 FO 使用.NET DLL
    D365 FO第三方集成(四)---客户端调用
    D365 FO第三方集成(三)---服务实现
  • 原文地址:https://www.cnblogs.com/ly570/p/10995940.html
Copyright © 2011-2022 走看看