网上都没有关于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();
}
}