Package com.freewebsys.blog.template

Source Code of com.freewebsys.blog.template.PageBarDirective

package com.freewebsys.blog.template;

import java.util.List;

import com.freewebsys.blog.page.PageConf;

import freemarker.template.TemplateMethodModel;
import freemarker.template.TemplateModelException;

public class PageBarDirective implements TemplateMethodModel {

  public PageBarDirective() {
  }

  public Object exec(List args) throws TemplateModelException {
    String str = "";
    if (null != args && args.size() == 2) {
      // 第1位是格式.

    }
    return str;
  }

  private static String buttonBegin = "<a class=\"pageNum\" href=\"";

  /**
   * 发布到线上多个跳转按钮方法,如1,2,3,4,5这样的按钮跳转最大7页跳转
   */
  /**
   * 生成多个跳转按钮方法,如1,2,3,4,5这样的按钮跳转最大7页跳转
   */
  public static String genCenterButtons(int start, int limit, int total,
      String baseUrl) {

    // 初始化参数.每次独立计算.否则分页有问题.
    PageConf pageConf = new PageConf(start, limit, total);
    PageConf pageConfTemp1 = new PageConf(start, limit, total);
    PageConf pageConfTemp2 = new PageConf(start, limit, total);

    // 结束页
    PageConf pageConfTempLast = new PageConf(start, limit, total);
    //
    pageConfTempLast.getLast();
    // 字符串拼写.
    StringBuilder strOut = new StringBuilder();
    // 设置开始为当前页往前3页,最小1
    int begin = Math.max(1, (pageConf.getCurrentPage() + 1) - 3);
    // 设置结束为当前页往后3页,最大到总页数
    int end = Math.min((pageConf.getCurrentPage() + 1) + 3,
        pageConf.getTotalPage());
    int abs = 5 - Math.abs(pageConfTempLast.getCurrentPage()
        - pageConf.getCurrentPage());
    if (abs > 0) {
      begin = pageConf.getCurrentPage() - abs;
      begin = Math.min(begin, (pageConf.getCurrentPage() + 1) - 3);
      begin = Math.max(1, begin);
    }
    // 计算当前页和首页的距离
    abs = 7 - pageConf.getCurrentPage();
    if (abs > 0) {
      end = pageConf.getCurrentPage() + abs;
      end = Math.max((pageConf.getCurrentPage() + 1) + 3, end);
      end = Math.min(end, pageConf.getTotalPage());
    }

    if (pageConfTemp1.hasPrevious()) {
      pageConfTemp1.getPrevious();
      strOut.append(buttonBegin + "start=" + pageConfTemp1.getStart()
          + "'\">");
      strOut.append("\u524d\u4e00\u9875</a>");// 上一页
    } else {
      strOut.append("<a class='prev-page disabled'>\u524d\u4e00\u9875</a>");
    }

    if (pageConf.getTotalPage() > 7) {// 如果大于7显示首页末页
      // 显示前一页

      if (pageConf.getCurrentPage() > 3) {
        // 显示第 1
        strOut.append(buttonBegin + baseUrl + "index.html'\">");
        strOut.append(1);
        strOut.append("</a>");
        if (pageConf.getCurrentPage() > 4) {
          // 显示第 2 页
          strOut.append(buttonBegin + baseUrl + "index"
              + pageConf.getCurrentPage() + ".html" + "\">");
          strOut.append(2);
          strOut.append("</a>");
        }
        strOut.append("<span>\u2026</span>");
      }
    }
    // if(pageConf.getCurrentPage())
    // 循环显示数字
    for (int i = begin; i <= end; i++) {
      // 循环多个table的button
      int startTemp = (i - 1) * pageConf.getLimit();
      if (i == (pageConf.getCurrentPage() + 1)) {
        strOut.append("<span class='paging-input'><input onkeyup=\"this.value=this.value.replace(/[^0-9]/g,'')\" class='current-page' type='text' name='page_num' value='");
        strOut.append(i);// 当前页显示禁用
        strOut.append("' size='1' onchange=\"window.location.href='");
        strOut.append("start=");
        strOut.append("'+(this.value-1)*" + pageConf.getLimit()
            + ";\"></span>\n");

      } else {
        strOut.append(buttonBegin + "start=" + startTemp + "'\">");
        strOut.append(i);
        strOut.append("</a>\n");
      }
    }
    // 末页显示,显示最后一页和倒数第二页
    if (pageConf.getTotalPage() > 7) {// 如果大于7显示首页末页

      if (pageConf.getCurrentPage() < (pageConfTempLast.getCurrentPage() - 3)) {
        // 如果当前页是倒数第4页就不显示
        strOut.append("…");
        // System.out.println(pageConf.getCurrentPage() + "/"
        // + pageConfTempLast.getCurrentPage());
        if (pageConf.getCurrentPage() < (pageConfTempLast
            .getCurrentPage() - 4)) {
          // 如果当前页是倒数第4页就不显示倒数第2页
          strOut.append(buttonBegin
              + "start="
              + (pageConfTempLast.getStart() - pageConf
                  .getLimit()) + "'\">");
          strOut.append(pageConfTempLast.getCurrentPage());
          strOut.append("</a>\n");
        }
        strOut.append(buttonBegin + "start="
            + pageConfTempLast.getStart() + "'\">");
        strOut.append(pageConfTempLast.getCurrentPage() + 1);
        strOut.append("</a>\n");
      }

    }

    // 显示下一页
    if (pageConfTemp2.hasNext()) {
      pageConfTemp2.getNext();
      strOut.append(buttonBegin + "start=" + pageConfTemp2.getStart()
          + "'\">");
      strOut.append("\u4e0b\u4e00\u9875</a>\n");// 下一页
    } else {
      strOut.append("<a class='prev-page disabled'>\u4e0b\u4e00\u9875</a>\n");
    }
    return strOut.toString();
  }

  public static void main(String[] args) {
    System.out.println(genCenterButtons(0, 10, 128, "/blog/"));
  }

}
TOP

Related Classes of com.freewebsys.blog.template.PageBarDirective

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.