自定義通用分頁
阿新 • • 發佈:2018-11-30
第一步配置PageBean(util)
public class PageBean {
private int page = 1;// 頁碼 private int rows = 3;// 行數/頁大小 private int total = 0;// 總記錄數 private boolean pagination = true;// 預設分頁 private String url;// 上一次請求的地址 private Map<String, String[]> parameterMap;// 上一次請求的所有引數 public PageBean() { super(); } /** * 對分頁bean進行初始化 * * @param request */ public void setRequest(HttpServletRequest request) { // 公共引數 this.setPage(request.getParameter("page")); this.setRows(request.getParameter("rows")); this.setPagination(request.getParameter("pagination")); // 請求地址和請求引數 this.setUrl(request.getContextPath() + request.getServletPath()); this.setParameterMap(request.getParameterMap()); } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public Map<String, String[]> getParameterMap() { return parameterMap; } public void setParameterMap(Map<String, String[]> parameterMap) { this.parameterMap = parameterMap; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public void setPage(String page) { if (null != page && !"".equals(page.trim())) { this.page = Integer.parseInt(page); } } public int getRows() { return rows; } public void setRows(int rows) { this.rows = rows; } public void setRows(String rows) { if (null != rows && !"".equals(rows.trim())) { this.rows = Integer.parseInt(rows); } } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public void setTotal(String total) { this.total = Integer.parseInt(total); } public boolean isPagination() { return pagination; } public void setPagination(boolean pagination) { this.pagination = pagination; } public void setPagination(String pagination) { if ("false".equals(pagination)) { this.pagination = false; } } /** * 下一頁 * * @return */ public int getNextPage() { int nextPage = page + 1; if (nextPage > this.getMaxPage()) { nextPage = this.getMaxPage(); } return nextPage; } /** * 上一頁 * * @return */ public int getPreviousPage() { int previousPage = page - 1; if (previousPage < 1) { previousPage = 1; } return previousPage; } /** * 最大頁碼 * * @return */ public int getMaxPage() { return total % rows == 0 ? total / rows : total / rows + 1; } /** * 起始記錄的下標 * * @return */ public int getStartIndex() { return (page - 1) * rows; } @Override public String toString() { return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]"; }
第二步加上倆個幫助類(tag)
PageTag
public class PageTag extends BodyTagSupport {
private static final long serialVersionUID = 8003507841172246203L; private PageBean pageBean; public PageTag() { super(); } public PageBean getPageBean() { return pageBean; } public void setPageBean(PageBean pageBean) { this.pageBean = pageBean; } @Override public int doStartTag() throws JspException { try { JspWriter out = pageContext.getOut(); out.println(this.toHtml()); return SKIP_BODY; } catch (Exception e) { throw new RuntimeException(e); } } private String toHtml() { StringBuffer bf = new StringBuffer(); if (null == pageBean || !pageBean.isPagination()) { return bf.toString(); } // 1. 生成表單 bf.append("<form id='pageBeanForm' action='" + pageBean.getUrl() + "' method='post'>"); bf.append("<input type='hidden' name='page' value=''>"); for (Map.Entry<String, String[]> entry : pageBean.getParameterMap().entrySet()) { String name = entry.getKey(); String[] values = entry.getValue(); if ("page".equals(name)) { continue; } for (String value : values) { bf.append("<input type='hidden' name='" + name + "' value='" + value + "'>"); } } bf.append("</form>"); // 2. 生成按鈕 bf.append("<div style='text-align: right;font-size: 12px;'>每頁" + pageBean.getRows() + "條,共" + pageBean.getTotal() + "條,當前第" + pageBean.getPage() + "頁,共" + pageBean.getMaxPage() + "頁 <a href='javascript:doGotoPage(1)'>首 頁</a> <a href='javascript:doGotoPage(" + pageBean.getPreviousPage() + ")'>上一頁</a> <a href='javascript:doGotoPage(" + pageBean.getNextPage() + ")'>下一頁</a> <a href='javascript:doGotoPage(" + pageBean.getMaxPage() + ")'>尾 頁</a> <input id='pageNumber' type='text' style='text-align: center;width: 30px;'> <a href='javascript:doSkipPage();'>GO</a></div>"); // 3. 動態生成js bf.append("<script type='text/javascript'>"); bf.append("function doGotoPage(page){"); bf.append(" var form = document.getElementById('pageBeanForm');"); bf.append(" form.page.value = page;"); bf.append(" form.submit();"); bf.append("}"); bf.append("function doSkipPage(page){"); bf.append(" var page = document.getElementById('pageNumber').value;"); bf.append(" if(!page||isNaN(page)||parseInt(page)<1||parseInt(page)>"+pageBean.getMaxPage()+"){"); bf.append(" alert('頁碼必須為1~"+pageBean.getMaxPage()+"之間數字');"); bf.append(" document.getElementById('pageNumber').value = '';"); bf.append(" return;"); bf.append(" }"); bf.append(" doGotoPage(parseInt(page));"); bf.append("}"); bf.append("</script>"); bf.append(""); bf.append(""); bf.append(""); bf.append(""); bf.append(""); return bf.toString(); }
RownumTag
public class RownumTag extends BodyTagSupport {
private static final long serialVersionUID = 8003507841172246203L; private PageBean pageBean; private Integer count; public RownumTag() { super(); } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } public PageBean getPageBean() { return pageBean; } public void setPageBean(PageBean pageBean) { this.pageBean = pageBean; } @Override public int doStartTag() throws JspException { try { int rownum = (pageBean.getPage() - 1) * pageBean.getRows() + count; JspWriter out = pageContext.getOut(); out.println(rownum + ""); return SKIP_BODY; } catch (Exception e) { throw new RuntimeException(e); } }
加上自定義的tld
<tag>
<name>rownum</name>
<tag-class>com.zking.tag.RownumTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>pageBean</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>count</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
在jsp介面引用
<%@taglib prefix=“z” uri="/zking" %>
《div》<z:page pageBean="${pageBean}"/>
《/div》