網上都沒有關於jfinal的通用分頁 今天寫完,共享一下css
直接上代碼java
第一步:JspRender.setSupportActiveRecord(false); 設置jsp支不支持mysql
否則提示HashMap轉Page失敗web
第二步:新建PageTag類,以下sql
public class PageTag extends TagSupport { private String data = "pageList";// 數據集合名字 private String href; // 鏈接地址 private StringBuffer output; // 頁面輸出 public String getData() { return data; } public void setData(String data) { this.data = data; } public String getHref() { return href; } public void setHref(String href) { this.href = href; } public StringBuffer getOutput() { return output; } public void setOutput(StringBuffer output) { this.output = output; } @Override public int doEndTag() throws JspException { return super.doEndTag(); } @Override public int doStartTag() throws JspException { try { output = new StringBuffer(); hander(); this.pageContext.getOut().write(output.toString()); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } private void hander() { // 若是URL不包含? 則添加? if (href.indexOf("?") < 0) { href += "?"; } if (href.endsWith("?") || href.endsWith("&")) { href += "pageIndex="; } else { href += "&pageIndex="; } Page pageList = (Page) this.pageContext.getRequest().getAttribute(data); if (pageList != null) { StringBuffer page = new StringBuffer(); int pageNumber=pageList.getPageNumber(); int totalPage=pageList.getTotalPage(); int totalRow=pageList.getTotalRow(); int startPage = pageNumber-4; int endPage = pageNumber+4; if(totalRow==0){ pageNumber=0; } if(startPage<1){ startPage=1; } if(endPage>totalPage){ endPage=totalPage; } if(pageNumber<=8){ startPage=1; } if(totalPage-pageNumber<8){ endPage=totalPage; } page.append("<div class=\"sabrosus \">") .append(" "); if(pageNumber<=1){ page.append("<span>上一頁</span> "); } if(pageNumber>1){ page.append("<a href=\""+href+(pageNumber-1)+" \">上一頁</a>"); } if(pageNumber>8){ page.append("<a href=\""+href+"1 \">1</a>") .append("<a href=\""+href+"2 \">2</a>") .append("..."); } for(int i=startPage;i<=endPage;i++){ if(pageNumber==i){ page.append("<span class=\"current\">"+i+"</span>"); }else{ page.append("<a href=\""+href+i+" \">"+i+"</a>"); } } if(totalPage-pageNumber>=8){ page.append("...") .append("<a href=\""+href+(totalPage-1)+" \">"+(totalPage-1)+"</a>") .append("<a href=\""+href+(totalPage)+" \">"+(totalPage)+"</a>"); } if(pageNumber==totalPage){ page.append("<span>下一頁</span>"); }else{ page.append("<a href=\""+href+(pageNumber+1)+" \">下一頁</a>"); } page.append(" "); page.append("</div>"); output.append(page); } } }
第三步:編寫一個PageBean,這樣子其它框架也能用,我這個是mysql的bootstrap
public class PageBean { int start; int limit; String dir; String sort; public int getStart() { return start; } public void setStart(int start) { this.start = start; } public int getLimit() { return limit; } public void setLimit(int limit) { this.limit = limit; } public String getDir() { return dir; } public void setDir(String dir) { this.dir = dir; } public String getSort() { return sort; } public void setSort(String sort) { this.sort = sort; } }
第四步:方法獲取pagebean的,在action能調用app
public PageBean getPageBean() { PageBean pageBean = new PageBean(); int start=1; int limit=10; if(getPara("pageIndex")!=null){ start=getParaToInt("pageIndex"); } String sort = getPara("sortField"); String dir = getPara("sortOrder"); pageBean.setDir(dir); pageBean.setLimit(limit); pageBean.setSort(sort); pageBean.setStart(start); return pageBean; }
第五步:下面是我用jfinal的分頁獲取方法框架
public Page getPageList(String[] search, PageBean pageBean) { StringBuilder sql = new StringBuilder("select * "); StringBuilder sqlFrom = new StringBuilder("from DB_CONFIG_INFO t where 1=1"); sqlFrom.append(PageUtil.getSearch(search)); sqlFrom.append(PageUtil.getOrder(pageBean)); Page paginate = paginate(pageBean.getStart(), pageBean.getLimit(), sql.toString(), sqlFrom.toString()); return paginate; }
第六配置文件:web.xmljsp
<jsp-config> <taglib> <taglib-uri>http://www.tag.mytag.com</taglib-uri> <taglib-location>/WEB-INF/tld/page_tag.tld</taglib-location> </taglib> </jsp-config>
第七:web-inf下建個lib ,裏面新建個tld文件 ,一個參數是href,一個是 data,就是page放在request裏面的nameide
<?xml version="1.0" encoding="UTF-8"?> <taglib version="1.2" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"> <description>page tag 1.0</description> <display-name>tag lib</display-name> <tlib-version>1.0</tlib-version> <short-name>taglib</short-name> <uri>/WEB-INF/tld/page_tag.tld</uri> <!-- 分頁 --> <tag> <name>page</name> <tag-class>platform.ext.taglib.PageTag</tag-class> <body-content>JSP</body-content> <attribute> <name>href</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>data</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib>
第八步:jsp頁面中
<%@ taglib uri="http://www.tag.mytag.com" prefix="page" %>
頁面中如何使用:默認把頁面的搜索條件加上,最後會自動補的,若是沒有參數則補?pageIndex=1,有,則補&pageIndex=1,pageList是request中設置的Page
<page:page href="${contextpath }/dbconfiginfo?username=${username }&pwd=${pwd }" data="pageList" />
第九步:關於分頁樣式,我用的是bootstrap自帶的,你們也能去找一下網上通用的,把代碼中的那個div樣式什麼的改一下就好了,我用的樣式地址是: http://www.woaicss.com/article/artical/css55.htm,這邊有24種,你們下下來,就好了,官網我也不知道,今天臨時找的
public class PageUtil {
public static String getSearch(String[] search) {
StringBuilder sdb = new StringBuilder();
if (search != null && search.length > 0) {
for (String str : search) {
sdb.append(str);
}
}
return sdb.toString();
}
public static String getOrder(PageBean pageBean) {
if (pageBean == null || StringKit.isBlank(pageBean.getSort()) || StringKit.isBlank(pageBean.getDir()))
return "";
StringBuilder sdb = new StringBuilder();
sdb.append(" order by ").append(pageBean.getSort()).append(" ").append(pageBean.getDir());
return sdb.toString();
}
}