java 分页组件_Java web 分页组件

[背景] 最近学习Spring MVC,涉及到分页显示的问题,准备自己整理一个分页工具。由于以前使用Strus框架使用 NewPandaKing 的一个PageBean和Page方法,耦合性比较高,于是优化一下。

[优点] 耦合低,使用方便。

[缺点] 由于耦合低,不查数据库,所以每次使用List的sublist方法,效率降低。

代码如下:

分页工具类:PageUtil.java

/**

* Java 分页工具类

*/

package com.util;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* @author neuhxy

* @version 2015-4-23 15:25:21

*

*/

public class PageUtil {

private int page = 1; // 当前页

public int total = 0; // 总页数

private int size = 10; // 每页10条数据

private int totalRows = 0; // 总数据数

private int pageStartRow = 0;// 每页的起始数

private int pageEndRow = 0; // 每页显示数据的终止数

private boolean hasNextPage = false; // 是否有下一页

private boolean hasPreviousPage = false; // 是否有前一页

private List> list; // 分页组件包含的集合

private List> show; // 分页中需要显示的List

private String action; // 设置跳转URL

private String method = "GET"; // 使用POST或者GET请求

@SuppressWarnings("unused")

private String code1; // 分页组件的现实代码

@SuppressWarnings("unused")

private String code2; // 分页组件的现实代码

private Map map = new HashMap(); // 隐含条件

public int[] sizeArray = { 10, 20, 50, 100, 1000, 10000 };

//默认构造函数

public PageUtil () {}

/**

* @param list

* @param size

*/

public PageUtil(List> list, int size) {

this.size = size;

this.list = list;

totalRows = list.size();

hasPreviousPage = false;

if ((totalRows % size) == 0) {

total = totalRows / size;

} else {

total = totalRows / size + 1;

}

if (page >= total) {

hasNextPage = false;

} else {

hasNextPage = true;

}

if (totalRows < size) {

this.pageStartRow = 0;

this.pageEndRow = totalRows;

} else {

this.pageStartRow = 0;

this.pageEndRow = size;

}

}

// 第一种样式

  • /
  • 格式

    public String getCode1() {

    StringBuffer sb = new StringBuffer();

    sb.append("

    + getMethod() + "\">");

    sb.append("

    • ");

    // 判断是否有上一页

    if (this.isHasPreviousPage()) {

    sb.append("

  • «");

} else {

sb.append("

«");

}

// 中间显示

for (int i = 1; i <= this.getTotal(); i++) {

String spanClzz = "

+ "\"> " + i

+ " (current)

";

if (this.page == i) {

spanClzz = "

" + i

+ " (current)

";

}

sb.append(spanClzz);

// 当大于9页数的时候才进行分页显示

if (this.getTotal() - 2 > 7) {

if (i == 5) {

i = this.getTotal() - 2;

sb.append("

... (current)");

}

}

}

// 判断是否有下一页

if (this.isHasNextPage()) {

sb.append("

»");

} else {

sb.append("

»");

}

sb.append("

");

return sb.toString();

}

// 第二种分页样式 带分页现实多少条记录设置

public String getCode2() {

StringBuffer sb = new StringBuffer();

String code = "

";

String scripts = "

+ "document.pageForm.elements['page'].value = p;"

+ "document.pageForm.submit();" + "} "

+ " function subPageSize(pageSize){ "

+ " document.pageForm.submit();" + "}";

setMethod("POST");

code += "

+ "\" method=\"" + getMethod() + "\">";

String hidden = "

+ "\">";

if (!map.isEmpty()) {

for (String key : map.keySet()) {

System.out.println("key= " + key + " and value= "

+ map.get(key));

hidden += "

+ "\" value=\"" + map.get(key) + "\" />";

}

}

code += hidden;

code += scripts;

// 底面样式 首页 上一页

if (this.getPage() != 1) {

code += "首页 "

+ "

+ ")\">上一页

";

}

// 跳第几页

code += "第";

for (int i = 1; i <= this.getTotal(); i++) {

if (i == this.getPage()) {

code += "" + i

+ "";

} else {

code += "" + i + "";

}

}

code += "页,共" + this.getTotal() + "页 ";

// 每页显示几个记录

code += "每页显示";

for (int j = 0; j < sizeArray.length; j++) {

if (sizeArray[j] == this.getSize()) {

code += "" + sizeArray[j] + "";

} else {

code += "" + sizeArray[j]

+ "";

}

}

code += "条记录";

// 下一页 尾页

if (this.getPage() != this.getTotal()) {

code += "

+ ")\">下一页

" + "

+ this.getTotal() + ")\">尾页

";

}

code += "

";

sb.append(code);

sb.append("");

return sb.toString();

}

// 判断要不要分页

public boolean isNext() {

return list.size() > 5;

}

public void setHasPreviousPage(boolean hasPreviousPage) {

this.hasPreviousPage = hasPreviousPage;

}

// 获取下一个内容

public List> getNextPage() {

page = page + 1;

disposePage();

return getShow(page);

}

// 处理分页

private void disposePage() {

if (page == 0) {

page = 1;

}

if ((page - 1) > 0) {

hasPreviousPage = true;

} else {

hasPreviousPage = false;

}

if (page >= total) {

hasNextPage = false;

} else {

hasNextPage = true;

}

}

// 获取上一页内容

public List> getPreviousPage() {

page = page - 1;

if ((page - 1) > 0) {

hasPreviousPage = true;

} else {

hasPreviousPage = false;

}

if (page >= total) {

hasNextPage = false;

} else {

hasNextPage = true;

}

return getShow(page);

}

public List> getShow() {

return show;

}

// 获取第 n 页内容

public List> getShow(int page) {

if (page == 0) {

this.setPage(1);

page = 1;

} else {

this.setPage(page);

}

this.disposePage();

if (page * size < totalRows) {// 判断是否为最后一页

pageEndRow = page * size;

pageStartRow = pageEndRow - size;

} else {

pageEndRow = totalRows;

pageStartRow = size * (total - 1);

}

List> show = null;

if (!list.isEmpty()) {

show = list.subList(pageStartRow, pageEndRow);

}

return show;

}

// 获取第一页内容

public List> getFistPage() {

if (this.isNext()) {

return list.subList(0, size);

} else {

return list;

}

}

//部分get set 方法自动补全即可

}

Spring-MVC Controller部分: UserController.java

@RequestMapping("view_user")

public String view_user(PageUtil p, HttpServletRequest request) {

//……仅提供部分关键代码

//分页组件用法:首先获取所有List

List users = userService.getUserList();

PageUtil pu = new PageUtil(users, p.getSize());

pu.setShow(pu.getShow(p.getPage()));

//告诉分页跳转URL, 对应这个方法本身的路径

pu.setAction("../user/view_user");

request.setAttribute("pu", pu);

return "admin/view_user";

}

在页面上显示部分:view_user.jsp

${item.id }

${pu.code1}

${pu.code2}

参考资料:

[1] http://www.cnblogs.com/wenqiangwu/archive/2013/01/21/page_util.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值