pagehelper.java~2~

来自「hibernate+spring的相片上传项目」· JAVA~2~ 代码 · 共 387 行 · 第 1/2 页

JAVA~2~
387
字号
package org.lenovoAC.Page;

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

/**
 * 分页器助手类
 *
 * @author pure
 *
 */
public class PageHelper {
        /**
         * 如果需要在分页条上保存一些状态信息,需要用到request对象
         */
        private HttpServletRequest request;

        private HttpSession session;

        public PageHelper(HttpServletRequest request) {
                this.request = request;
                this.session = this.request.getSession();
        }

        /**
         * 用于计算用户自定义每页显示记录数
         *
         * @return 每页显示记录数
         */
        public int doCustomPerPage(int defaultPerPage)
        {
                int perPage = defaultPerPage;
                String cUserPerPage = null;
                String cPerPage = ParamUtil.getString(this.request, "perPage", "");
                if (!"".equals(cPerPage))
                {
                        this.session.setAttribute("cPerPage", cPerPage);
                }
                cUserPerPage = (String) this.session.getAttribute("cPerPage");
                if (null != cUserPerPage)
                {
                        perPage = Integer.parseInt(cUserPerPage);
                }
                return perPage;
        }

        /**
         * 根据模板生成翻页条
         *
         * @param pageObject
         * @return 返回翻页条字符串
         */
        public String getPageBreakStr(Page pageObject) {
                // 取分页器参数
                int page = pageObject.getPage();
                int total = pageObject.getTotal();
                int perPage = pageObject.getPerPage();
                int viewPage = pageObject.getViewPage();
                int cNum = pageObject.getCNum();

                /**
                 * 计算前、后可见页码起始位置
                 */
                int startPage = ((page - 1) / viewPage) * viewPage + 1;
                int remberStart = 0;

                String contextPath = pageObject.getContextPath();
                String url = contextPath + "/" + pageObject.getUrl();
                String param = pageObject.getParam();
                /**
                 * 图片滤镜样式
                 */
                String imgStyle = "style=\"filter:gray\"";
                /**
                 * 是否翻页可用 首页 上一页 下一页 最后一页 true 可用 false 不可用
                 */
                boolean display1 = false;
                boolean display2 = false;
                boolean display3 = false;
                boolean display4 = false;
                /**
                 * 是否有url参数
                 */
                boolean isHaveParam = false;

                if (null != param && !"".equals(param)) {
                        isHaveParam = true;
                }

                /**
                 * 绝对路径
                 */
                String realPath = pageObject.getRealPath();
                /**
                 * 翻页模板名
                 */
                String pageTemplate = pageObject.getPageTemplate();

                /**
                 * 计算总页数
                 */
                int totalPage = sumPage(total, perPage);
                page = getCpage(total, perPage, page);

                if (totalPage <= 0)
                        return "";
                /**
                 * 保存当前页码
                 */
                this.request.setAttribute("cpage", String.valueOf(page));

                // 计算页数序列(每次显示10个页数)1..10 11..20 21..30 ....
                StringBuffer pageBarBuffer = new StringBuffer();

                StringBuffer prevPageNumStart = new StringBuffer();
                StringBuffer prevPageNumEnd = new StringBuffer();

                StringBuffer nextPageNumStart = new StringBuffer();
                StringBuffer nextPageNumEnd = new StringBuffer();

                /**
                 * 是否在前?页和后?页图片上使用样式
                 */
                boolean isPrevPageNumStyle = false;
                boolean isNextPageNumStyle = false;

                pageBarBuffer.append("&nbsp;&nbsp;");
                if (startPage > viewPage) {
                        prevPageNumStart.append("<a href='" + url);
                        prevPageNumStart.append("?page=" + (startPage - 1) + "' >");
                        if (isHaveParam) {
                                prevPageNumStart.append("&" + param);
                        }
                        prevPageNumEnd.append("</a>");
                } else {
                        isPrevPageNumStyle = true;
                }

                /**
                 * 分页页码条
                 */
                for (remberStart = startPage; remberStart < startPage + viewPage; remberStart++) {
                        if (remberStart == page) {
                                pageBarBuffer
                                                .append("<font color=\"red\" face=\"arial,sans-serif\"><b>"
                                                                + remberStart + "</b></font>&nbsp;");
                        } else {
                                if (isHaveParam) {
                                        pageBarBuffer
                                                        .append("<a href=\""
                                                                        + url
                                                                        + "?page="
                                                                        + remberStart
                                                                        + "&"
                                                                        + param
                                                                        + "\"><font face=\"arial,sans-serif\" color=\"#000000\"><b>"
                                                                        + remberStart + "</b></font></a>&nbsp;");
                                } else {
                                        pageBarBuffer
                                                        .append("<a href=\""
                                                                        + url
                                                                        + "?page="
                                                                        + remberStart
                                                                        + "\"><font face=\"arial,sans-serif\" color=\"#000000\"><b>"
                                                                        + remberStart + "</b></font></a>&nbsp;");
                                }
                        }

                        if (remberStart == totalPage)
                                break;
                }

                if ((remberStart - startPage) == viewPage) {
                        nextPageNumStart.append("<a href='" + url);
                        nextPageNumStart.append("?page=" + remberStart + "'>");
                        if (isHaveParam) {
                                nextPageNumStart.append("&" + param);
                        }
                        nextPageNumEnd.append("</a>");
                } else {
                        isNextPageNumStyle = true;
                }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?