美文网首页
具体分页代码

具体分页代码

作者: 自由主义者 | 来源:发表于2020-03-03 17:16 被阅读0次
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Optional;
public class PageUtil {

    /**
     * 封装表格提交的分页参数(简单的封装)
     * @return
     */
    public static PageRequest getGridPageParams() {
        int pageNumber = 0;
        int pageSize = 20;
        HttpServletRequest request = ServiceUtil.getRequest();
        String P_pageNumber = request.getParameter("P_pageNumber");
        String P_pagesize = request.getParameter("P_pagesize");
        String order = request.getParameter("P_orders");
        String stringDirection = request.getParameter("sord");
        PageRequest pageRequest = null;
        if (null != P_pageNumber) {
            pageNumber = Integer.parseInt(P_pageNumber) - 1;
        }
        if (null != P_pagesize) {
            pageSize = Integer.parseInt(P_pagesize);
        }
        if (order != null && stringDirection != null) {
            //TODO
            Optional<Direction> direction = Direction.fromOptionalString(stringDirection);
            Sort sort = new Sort(direction.get(), order);
            pageRequest = new PageRequest(pageNumber, pageSize, sort);
            return pageRequest;
        }
        pageRequest = new PageRequest(pageNumber, pageSize);
        return pageRequest;
    }

    /**
     * 封装表格提交的分页参数(简单的封装)
     *
     * @return
     */
    public static PageRequest getGridPageParams(Long totalElements) {
        int pageNumber = 0;
        int pageSize = 20;
        HttpServletRequest request = ServiceUtil.getRequest();
        String P_pageNumber = request.getParameter("P_pageNumber");
        String P_pagesize = request.getParameter("P_pagesize");
        String order = request.getParameter("P_orders");
        String stringDirection = request.getParameter("sord");
        PageRequest pageRequest = null;
        if (null != P_pageNumber) {
            pageNumber = Integer.parseInt(P_pageNumber) - 1;
        }
        if (null != P_pagesize) {
            pageSize = Integer.parseInt(P_pagesize);
        }
        //若之前页面已经能展示所有数据,就将pageNumber设置为0,跳转到第一页
        if (totalElements <= pageSize * pageNumber) {
            pageNumber = 0;  
        }
        if (order != null && stringDirection != null) {
            Optional<Direction> direction = Direction.fromOptionalString(stringDirection);
            Sort sort = new Sort(direction.get(), order);
            pageRequest = new PageRequest(pageNumber, pageSize, sort);
            return pageRequest;
        }
        pageRequest = new PageRequest(pageNumber, pageSize);
        return pageRequest;
    }

    public static PageVo parseFromPage(Page page) {
        PageVo pageVo = new PageVo();
        pageVo.setData(page.getContent());
        pageVo.setPageNumber(page.getNumber() + 1);
        pageVo.setPageSize(page.getSize());
        pageVo.setTotal(page.getTotalElements());
        pageVo.setTotalPages(page.getTotalPages());
        return pageVo;
    }
    
    public static PageVo parseFromList(List list) {
        PageVo pageVo = new PageVo();
        pageVo.setData(list);
        pageVo.setPageNumber(1);
        pageVo.setPageSize(20);
        pageVo.setTotal(Long.valueOf(list.size()));
        pageVo.setTotalPages(1);
        return pageVo;
    }

    /**
     * 根据查询的结果和前台分页参数进行分页
     */
    public static PageVo parseFromList(List list, Pageable pageable) {
        PageVo pageVo = new PageVo();
        int pageSize = pageable.getPageSize();
        long totalElements = Long.valueOf(list.size());//list包含所有查询到的数据(sql中没有limit)
        pageVo.setData(list);
        pageVo.setPageNumber(pageable.getPageNumber());
        pageVo.setPageSize(pageSize);
        pageVo.setTotal(totalElements);
        pageVo.setTotalPages((int) (totalElements / pageSize
                + Integer.valueOf((totalElements % pageSize == 0 ? 0 : 1))));
        return pageVo;
    }

}
Entity:
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class PageVo {

    private static final long serialVersionUID = 1L;

    private List<?> data;

    private Integer pageNumber;

    private Integer pageSize;

    private Long total;

    private Integer totalPages;

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    public List<?> getData() {
        return data;
    }

    public Integer getPageNumber() {
        return pageNumber;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public Long getTotal() {
        return total;
    }

    public Integer getTotalPages() {
        return totalPages;
    }

    public void setData(final List<?> data) {
        this.data = data;
    }

    public void setPageNumber(final Integer pageNumber) {
        this.pageNumber = pageNumber;
    }

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

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

    public void setTotalPages(final Integer totalPages) {
        this.totalPages = totalPages;
    }

    /**
     * 查询用户一段时间内的交易总计的专用假分页,Controller中的userList(User user)方法用到
     * @param data 仅有当前页包含的数据
     * @param pageNumber
     * @param pageSize
     * @param totalElements
     * @return
     */
    public static PageVo fakePageVoForTransRecord(List<?> data, Integer pageNumber, final Integer pageSize, Long totalElements) {
        PageVo page = new PageVo();
        page.setData(data);
        page.setPageNumber(pageNumber); //这些都是返回页面的数据,后台之前已经分页过了
        page.setPageSize(pageSize);
        page.setTotal(totalElements);
        page.setTotalPages((int) (totalElements / pageSize + Integer.valueOf((totalElements % pageSize == 0 ? 0 : 1))));
        return page;
    }

    
    /**
     * 假分页
     * @param data 包含查询到的所有页面的数据
     * @param pageNumber
     * @param pageSize
     * @return
     */
    public static PageVo fakePageVo(List<?> data, Integer pageNumber, final Integer pageSize) {
        PageVo page = new PageVo();
        Long total = Long.valueOf(data.size());
        if (total <= pageSize * (pageNumber - 1)) { //若之前页面已经能展示所有数据,就将pageNumber设置为1,跳转到第一页
            pageNumber = 1;
        }
        if (total < pageSize * pageNumber) { //判断当前页pageNumber是否为最后一页
            page.setData(data.subList((pageNumber - 1) * pageSize, total.intValue()));
        } else {
            page.setData(data.subList((pageNumber - 1) * pageSize, pageNumber * pageSize));
        }
        page.setPageNumber(pageNumber);
        page.setPageSize(pageSize);
        page.setTotal(total);
        page.setTotalPages((int) (total / pageSize + Integer.valueOf((total % pageSize == 0 ? 0 : 1))));
        return page;
    }
}

相关文章

网友评论

      本文标题:具体分页代码

      本文链接:https://www.haomeiwen.com/subject/ylnhlhtx.html