网上流传的一些Java生成分页导航工具都是有那么些bug,抽空自己写了个,如果发现问题请联系我;
顺便利用这种思路写了个java分页导航生成工具
看看效果图
![](http://image103.360doc.com/DownloadImg/2017/01/1814/89533860_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 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
|