java分页导航生成工具

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

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


看看效果图


java分页导航生成工具_第1张图片


/**
 * 分页导航生成工具类
 * 
 * @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("onclick='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 [email protected]
 * @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


你可能感兴趣的:(Web,javaee,开源,分页,导航)