java分页导航生成工具

网上流传的一些java生成分页导航工具都是有那么些bug,抽空自己写了个,如果发现问题请联系我;

顺便利用这种思路写了个java分页导航生成工具


看看效果图




/**
 * 分页导航生成工具类
 * 
 * @author shadow
 * 
 */
public class NavUtils {

	private static final int show_ = 10;

	private static final int sep_ = show_ / 2;

	private static final int split_ = sep_ / 2;

	public static String build(int offset, int limit, int total) {

		int count = total % limit == 0 ? total / limit : total / limit + 1;

		StringBuffer buffer = new StringBuffer();

		buffer.append("<span class='count_result'>共 " + count + " 页 " + total + " 条记录 </span>");

		// 判断是否显示上页
		if (offset > 1) {
			int prev = offset - 1;
			buffer.append(getNormalPart("上页", prev, limit));
		}

		// 页数不超过限制的情况
		if (count <= show_)
			buffer.append(getPart(1, count, offset, limit));

		// 页数大于限制的情况

		if (count > show_) {
			if (offset <= sep_) {
				buffer.append(getPart(1, sep_ + split_, offset, limit));
				buffer.append(getEllipsis("...")).append(getNormalPart(String.valueOf(count), count, limit));
			} else if (offset > (count - sep_)) {
				buffer.append(getNormalPart(String.valueOf(1), 1, limit)).append(getEllipsis("..."));
				buffer.append(getPart(count - sep_ - 1, count, offset, limit));
			} else {
				buffer.append(getNormalPart(String.valueOf(1), 1, limit)).append(getEllipsis("..."));
				buffer.append(getPart(offset - split_ - 1, offset + split_ + 1, offset, limit));
				buffer.append(getEllipsis("...")).append(getNormalPart(String.valueOf(count), count, limit));
			}
		}

		// 判断是否显示下页
		if (offset < count) {
			int next = offset + 1;
			buffer.append(getNormalPart("下页", next, limit));
		}

		return buffer.toString();

	}

	// 一般按钮
	private static StringBuffer getNormalPart(String content, int offset, int limit) {
		StringBuffer buffer = new StringBuffer();
		buffer.append("<a href='javascript:void(0);' ").append("οnclick='pageClick(").append(offset).append(",").append(limit).append(
				");'").append("'>").append(content).append("</a>");
		return buffer;
	}

	// 拼接中间部分
	private static StringBuffer getPart(int begin, int end, int offset, int limit) {
		StringBuffer buffer = new StringBuffer();
		for (int i = begin; i <= end; i++) {
			if (offset == i)
				buffer.append(getSelectedPart(String.valueOf(i), i));
			else
				buffer.append(getNormalPart(String.valueOf(i), i, limit));
		}
		return buffer;
	}

	// 选中按钮
	private static StringBuffer getSelectedPart(String content, Integer value) {
		StringBuffer buffer = new StringBuffer();
		buffer.append("<a href='javascript:void(0);'").append("' class='current'>").append(content).append("</a>");
		return buffer;
	}

	// 省略部分
	private static StringBuffer getEllipsis(String content) {
		StringBuffer buffer = new StringBuffer();
		buffer.append("<a href='javascript:void(0);'>").append(content).append("</a>");
		return buffer;
	}


怎么使用呢?看我下面的使用方法(参数vo是继承Page类)

/**
 * 分页参数对象
 * 
 * @author shadow
 * @email 124010356@qq.com
 * @create 2012.04.28
 */
@SuppressWarnings("serial")
public class Page<T> implements Serializable {

	private Integer offset = 1; // 索引值
	private Integer limit = 10; // 显示数
	private Integer total = 0; // 记录数

	private Integer index;

	private String navigation; // 分页导航

	private List<T> list; // 分页数据

	public Integer getLimit() {
		return limit;
	}

	public void setLimit(Integer limit) {
		this.limit = limit;
	}

	public Integer getCount() {
		return total % limit == 0 ? total / limit : total / limit + 1;
	}

	public Integer getTotal() {
		return total;
	}

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

	public Integer getOffset() {
		int count = getCount();
		if (offset > count)
			offset = count;
		if (offset < 1)
			offset = 1;
		return offset;
	}

	public void setIndex(Integer index) {
		this.index = index;
	}

	public Integer getIndex() {
		if (offset < 1)
			offset = 1;
		index = (offset - 1) * limit;
		return index;
	}

	public void setOffset(Integer offset) {
		this.offset = offset;
	}

	public String getNavigation() {
		return navigation;
	}

	public void setNavigation(String navigation) {
		this.navigation = navigation;
	}

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

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

}


@Override
	public Result page(AdminUserVo vo) {
		Result result = getInstance();
		try {
			vo.setTotal(dao.page4total(vo));
			List<AdminUser> models = dao.page4list(vo);
			vo.setList(models);
			vo.setNavigation(NavUtils.build(vo.getOffset(), vo.getLimit(), vo.getCount()));
			result.setSuccess(true).setValue(vo);
		} catch (Exception e) {
			result.setException(new MVCException(e));
		}
		return result;
	}


最后页面增加一个div存放page.navigation这个字符变成html标签即可,以及在页面增加pageClick的js函数作为回调响应请求,相信大家都懂了吧...thx


版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.第一步:导入paging.jar包。 2.第一步:调用; //通过调用不同的构造函数生成不同导航字符串 PageControl pageControl = new PageControl("PageTest", page, 30); //数字列表导航形式,首尾页时仍显示上一页,下一页(默认形式) PageControl pageControl2 = new PageControl("PageTest", page, 30, false); //数字列表导航形式,首尾页时不显示上一页,下一页 PageControl pageControl3 = new PageControl("PageTest", page, 30, false, false);//数字列导航表形式,不显示首尾页 PageControl pageControl4 = new PageControl("PageTest", page, 30, PageType.WORDTYPE);//文字导航形式 PageControl pageControl5 = new PageControl("PageTest", page, 30, false, PageType.WORDTYPE);//文字导航形式,不显示首尾页 request.setAttribute("pageControlNumberType1", pageControl.pageControl()); request.setAttribute("pageControlNumberType2", pageControl2.pageControl()); request.setAttribute("pageControlNumberType3", pageControl3.pageControl()); request.setAttribute("pageContrlWordType4", pageControl4.pageControl()); request.setAttribute("pageContrlWordType5", pageControl5.pageControl()); request.getRequestDispatcher("index.jsp").forward(request, response); 3.第三步:通过jstl显示: 数字列表导航形式,首尾页时仍显示上一页,下一页(默认形式):${pageControlNumberType1 }<br/> 数字列表导航形式,首尾页时不显示上一页,下一页:${pageControlNumberType2 }<br/> 数字列表导航形式,不显示首尾页:${pageControlNumberType3 }<br/> 文字导航形式:${pageContrlWordType4 }<br/> 文字导航形式,不显示首尾页:${pageContrlWordType5 }
1.第一步:导入paging.jar包。 2.第一步:调用; //通过调用不同的构造函数生成不同导航字符串 PageControl pageControl = new PageControl("PageTest", page, 30); //数字列表导航形式,首尾页时仍显示上一页,下一页(默认形式) PageControl pageControl2 = new PageControl("PageTest", page, 30, false); //数字列表导航形式,首尾页时不显示上一页,下一页 PageControl pageControl3 = new PageControl("PageTest", page, 30, false, false);//数字列导航表形式,不显示首尾页 PageControl pageControl4 = new PageControl("PageTest", page, 30, PageType.WORDTYPE);//文字导航形式 PageControl pageControl5 = new PageControl("PageTest", page, 30, false, PageType.WORDTYPE);//文字导航形式,不显示首尾页 request.setAttribute("pageControlNumberType1", pageControl.pageControl()); request.setAttribute("pageControlNumberType2", pageControl2.pageControl()); request.setAttribute("pageControlNumberType3", pageControl3.pageControl()); request.setAttribute("pageContrlWordType4", pageControl4.pageControl()); request.setAttribute("pageContrlWordType5", pageControl5.pageControl()); request.getRequestDispatcher("index.jsp").forward(request, response); 3.第三步:通过jstl显示: 数字列表导航形式,首尾页时仍显示上一页,下一页(默认形式):${pageControlNumberType1 }<br/> 数字列表导航形式,首尾页时不显示上一页,下一页:${pageControlNumberType2 }<br/> 数字列表导航形式,不显示首尾页:${pageControlNumberType3 }<br/> 文字导航形式:${pageContrlWordType4 }<br/> 文字导航形式,不显示首尾页:${pageContrlWordType5 }
Java Web 实现分页查询通常需要以下步骤: 1. 在数据库中查询总记录数。 2. 根据当前页码和每页显示的记录数计算出需要查询的记录的起始位置。 3. 在数据库中查询需要显示的记录。 4. 将查询结果封装成一个 JavaBean 或者 List 的形式,传递给前端页面。 5. 在前端页面上显示查询结果,并且生成分页导航栏。 以下是一个简单的分页查询实现的代码示例: ``` // 获取当前页码和每页显示的记录数 int currentPage = Integer.parseInt(request.getParameter("currentPage")); int pageSize = Integer.parseInt(request.getParameter("pageSize")); // 在数据库中查询总记录数 int totalCount = dao.getTotalCount(); // 计算需要查询的记录的起始位置 int start = (currentPage - 1) * pageSize; // 在数据库中查询需要显示的记录 List<User> userList = dao.getUserList(start, pageSize); // 将查询结果封装成一个 JavaBean 或者 List 的形式,传递给前端页面 request.setAttribute("userList", userList); // 在前端页面上显示查询结果,并且生成分页导航栏 int totalPage = (totalCount + pageSize - 1) / pageSize; String pageNav = PageUtils.getPageNav(currentPage, totalPage); request.setAttribute("pageNav", pageNav); ``` 其中,`dao` 是数据访问对象,`User` 是一个 JavaBean 类,`PageUtils` 是一个工具类,用来生成分页导航栏。在 `dao` 中,`getTotalCount` 方法用来获取总记录数,`getUserList` 方法用来获取需要显示的记录。在前端页面上,通过 `userList` 和 `pageNav` 来显示查询结果和分页导航栏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值