网上很容易找到分页的方法,但是功能相对弱,比如两个翻页单向关联的情况需要改写代码。而且在使用中需要加入大段代码。 我对其做了相关改进。 先看看 [使用方法]: /* 如果要在一个action里面多次使用Pager对象则要重命名链接中的参数名字,默认为pager.offset */
Pager pagerDate = new Pager(request,mapping,"pagerDate.offset"); Calendar nowCalendar = Calendar.getInstance(); nowCalendar.add(Calendar.DATE,pagerDate.getOffset()); //生成分页对象 Pager page = new Pager(request, mapping); //可重写每页显示条数 page.setLength(2); //按页面要求得到数据 List list = scheduleManager.getScheduleDayList(nowCalendar, page.getOffset(), page.getLength()); int size = scheduleManager.getScheduleDaySize(nowCalendar); //绑定依赖 page.bindPager(pagerDate); //构造分页内容标签 String pagerHeader = page.generate(size); request.setAttribute("pagerHeader", pagerHeader); request.setAttribute("ContentList", list); request.setAttribute("pagerDateHeader",pagerDate.generate()); [jsp页面显示,只需]: <bean:write name="pagerHeader" filter="false"/> <bean:write name="pagerDateHeader" filter="false"/> [Pager对象实现代码]: package com.itone.virgo.util; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionMapping; public class Pager { private int MAX_PAGE_INDEX = 15; private String header = ""; private int offset = 0; private int length = 20; HttpServletRequest request = null; ActionMapping mapping = null; String url = ""; String paramId = "pager.offset"; String bindString = ""; /** * @param request * @param mapping */ public Pager(HttpServletRequest request, ActionMapping mapping) { this.request = request; this.mapping = mapping; this.url = request.getContextPath() + mapping.getModuleConfig().getPrefix() + mapping.getPath() + ".do"; String pageOffset = request.getParameter(paramId); if (pageOffset == null || pageOffset.equals("")) { offset = 0; } else { offset = Integer.parseInt(pageOffset); } } /** * 一个页面有多个pager对象时需要重写paramId使url里面的param参数有区别 * * @param request * @param mapping * @param paramId */ public Pager(HttpServletRequest request, ActionMapping mapping, String paramId) { this.request = request; this.mapping = mapping; this.paramId = paramId; this.url = request.getContextPath() + mapping.getModuleConfig().getPrefix() + mapping.getPath() + ".do"; String pageOffset = request.getParameter(paramId); if (pageOffset == null || pageOffset.equals("")) { offset = 0; } else { offset = Integer.parseInt(pageOffset); } } /** * 普遍情况 */ public String generate(int size) { this.header = "共有" + size + "项符合查询"; if (size > length) { String pref; if (url.indexOf("?") > -1) { pref = "&"; } else { pref = "?"; } String header = "<font face=‘Helvetica‘ length=‘-1‘>" + this.header + " "; if (offset > 0) { header += " <a href=\"" + url + pref + paramId + "=" + (offset - length) + this.bindString + "\"> << </a>\n"; } int start; int radius = MAX_PAGE_INDEX / 2 * length; if (offset < radius) { start = 0; } else if (offset < size - radius) { start = offset - radius; } else { start = (size / length - MAX_PAGE_INDEX) * length; } for (int i = start; i < size && i < start + MAX_PAGE_INDEX * length; i += length) { if (i == offset) { header += "<b>" + (i / length + 1) + "</b>\n"; } else { header += " <a href=\"" + url + pref + paramId + "=" + i + this.bindString + "\">" + (i / length + 1) + "</a>\n"; } } if (offset < size - length) { header += " <a href=\"" + url + pref + paramId + "=" + ((int) offset + (int) length) + this.bindString + "\"> >> </a>\n"; } header += "</font>"; return header; } else { return ""; } } /** * 必然有上一页下下一页情况 * * @return */ public String generate() { this.header = "其它查询"; String pref; if (url.indexOf("?") > -1) { pref = "&"; } else { pref = "?"; } String header = "<font face=‘Helvetica‘ size=‘-1‘>" + this.header + " "; header += " <a href=\"" + url + pref + paramId + "=" + (offset - 1) + this.bindString + "\"> << </a>\n"; header += " <a href=\"" + url + pref + paramId + "=" + (offset + 1) + this.bindString + "\"> >> </a>\n"; header += "</font>"; return header; } /** * 如果一个页面有两个pager对象,而且单向依赖,就需要把依赖方绑定到被依赖方 * * @param sourcePager */ public void bindPager(Pager sourcePager) { bindString = bindString + "&" + sourcePager.paramId + "=" + sourcePager.offset; } public String getUrl() { return url; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public int getOffset() { return offset; } public void setOffset(int offset) { this.offset = offset; } public String getParamId() { return paramId; } public void setParamId(String paramId) { this.paramId = paramId; } } |
|