web 前端
1:分页
package core.util; import java.io.Serializable; import java.util.List; /** * 分页器 * * @author */ public class Paginator implements Serializable { /** * */ private static final long serialVersionUID = 2018436532193281591L; public static final int DEFAULT_ITEMS_PER_PAGE = 20; public static final int DEFAULT_SLIDER_SIZE = 7; public static final int UNKNOWN_ITEMS = Integer.MAX_VALUE; private int page; private int items=0; private int pageSize; private String sortBy; private String order; //控制页面上页签边界 private int start; private int end; // SqlMap入参 private Object params; // 返回结果集 private List<?> results; public Paginator() { this(0); } public Paginator(int pageSize) { this(pageSize, UNKNOWN_ITEMS); } public Paginator(int pageSize, int items) { this.items = (items >= 0 ? items : 0); this.pageSize = (pageSize > 0 ? pageSize : DEFAULT_ITEMS_PER_PAGE); this.page = calcPage(0); } /** * SqlMap 入参 * * @return */ public Object getParams() { return params; } public void setParams(Object params) { this.params = params; } /** * 分页结果数据 * * @return */ public List<?> getResults() { return results; } public void setResults(List<?> results) { this.results = results; } /** * 得到总页数 * * @return */ public int getTotalPage() { return (int) Math .ceil((double) this.items / (double) this.pageSize); } /** * 得到当前页 * * @return */ public int getPage() { return this.page; } /** * 设置当前页 * * @param page * @return */ public int setPage(int page) { return this.page = calcPage(page); } /** * 得到总记录数 * * @return */ public int getItems() { return this.items; } /** * 设置总记录数 * * @return */ public int setItems(int items) { this.items = (items >= 0 ? items : 0); return this.items; } /** * 得到每页显示记录数 * * @return */ public int getPageSize() { return this.pageSize; } /** * 设置每页显示记录数 * * @param pageSize * @return */ public int setPageSize(int pageSize) { this.pageSize = (pageSize > 0 ? pageSize : DEFAULT_ITEMS_PER_PAGE); return this.pageSize; } /** * 得到分页记录的开始下标 * * @return */ public int getOffset() { return this.page > 0 ? this.pageSize * (this.page - 1) : 0; } public int getLength() { if (this.page > 0) { return Math.min(this.pageSize * this.page, this.items) - this.pageSize * (this.page - 1); } return 0; } public int getBeginIndex() { if (this.page > 0) { return this.pageSize * (this.page - 1) + 1; } return 0; } public int getEndIndex() { if (this.page > 0) { return Math.min(this.pageSize * this.page, this.items); } return 0; } /** * 以当前记录的下标设置分页 * * @param itemOffset * @return */ public int setItem(int itemOffset) { return setPage(itemOffset / this.pageSize + 1); } /** * 得到首页 * * @return */ public int firstPage() { return calcPage(1); } /** * 得到尾页 * * @return */ public int lastPage() { return calcPage(getTotalPage()); } /** * 前一页 * * @return */ public int previousPage() { return calcPage(this.page - 1); } /** * 前N页 * * @param n * @return */ public int previousPage(int n) { return calcPage(this.page - n); } /** * 后一页 * * @return */ public int nextPage() { return calcPage(this.page + 1); } /** * 后N页 * * @param n * @return */ public int nextPage(int n) { return calcPage(this.page + n); } /** * 是否可用 * * @param page * @return */ public boolean enablePage(int page) { return (page < 1) || (page > getTotalPage()) || (page == this.page); } /** * 序列器 * * @return */ public int[] slider() { return slider(DEFAULT_SLIDER_SIZE); } /** * 序列器 * * @return */ public int[] slider(int width) { int pages = getTotalPage(); if ((pages < 1) || (width < 1)) { return new int[0]; } if (width > pages) { width = pages; } int[] slider = new int[width]; int first = this.page - (width - 1) / 2; if (first < 1) { first = 1; } if (first + width - 1 > pages) { first = pages - width + 1; } for (int i = 0; i < width; i++) { slider[i] = (first + i); } return slider; } /** * 计算分页 * * @param page * @return */ protected int calcPage(int page) { int pages = getTotalPage(); if (pages > 0) { return page > pages ? pages : page < 1 ? 1 : page; } return 0; } public String getSortBy() { return sortBy; } public void setSortBy(String sortBy) { this.sortBy = sortBy; } public String getOrder() { return order; } public void setOrder(String order) { this.order = order; } public int getStart() { start = page-2; if(start<1){ end = end+1-start; start = 1; } return start; } public int getEnd() { end = page+2; if(end>getTotalPage()){ start = start - (end-getTotalPage()); end = getTotalPage(); } if(end<1){ end = 1; } return end; } /* 渲染页签 包含当前页 */ public int[] getNums() { int start = getStart(); int end = getEnd(); if(start>end){ return null; } int[] nums = new int[end-start+1]; for (int i = 0; i < nums.length; i++) { nums[i] = start+i; } return nums; } }
使用时
controller
public Result getTagList() { Form<Paginator> form = Form.form(Paginator.class); form = form.bindFromRequest(request()); final Paginator paginator = (Paginator)form.get(); String searchTag = form.data().get("SearchTag"); List<Tag> tagList = tagService.getTagList(paginator,searchTag); return ok(TagHTML.render(tagList,paginator,searchTag)); }
view
<form id="searchForm" name="searchForm" action="/admin/tag/list"> <input type="hidden" name="page" id="page" value="@paginator.getPage()"/> <input type="hidden" name="pageSize" id="pageSize" value="@paginator.getPageSize()"/>/form>
<table>
xxxxxx
/table>
@Page(paginator)
例子
<div class="page-header col-lg-12"> <form id="searchForm" name="searchForm" action="/admin/tag/list"> <input type="hidden" name="page" id="page" value="@paginator.getPage()"/> <input type="hidden" name="pageSize" id="pageSize" value="@paginator.getPageSize()"/> <div class="input-group formSearch form-group col-lg-12" > <div class="col-lg-4 f-padding-left-0"> <input type="text" class="form-control" name="SearchTag" id="SearchTag" value="@searchTag" placeholder="标签"/> </div> <span class="col-lg-2 f-padding-left-0"> <button class="btn btn-default font-16px" type="button" id="btnSearch"> <span class="glyphicon glyphicon-search" aria-hidden="true"></span> </button> </span> </div> </form> <table class="table table-striped table-hover table-bordered" id="overall"> <thead > <tr> <th class="col-md-1">ID</th> <th class="col-md-1">操作<input type="checkbox" name="all_check" id="all_check"></th> <th class="col-md-1">标签</th> <th class="col-md-1">创建时间</th> </tr> </thead> <tbody> @for(mapEntry<-tagList){ <tr> <td>@mapEntry.getTagId()</td> <td><input type="checkbox" name="del_check" value="@mapEntry.getTagId()"></td> <td>@mapEntry.getName()</td> <td> @DateUtil.format(mapEntry.getCreatedTime(), "yyyy-MM-dd HH:mm:ss") </td> </tr> } </tbody> </table> <div class="col-lg-12 f-padding-left-0"> <div class="col-lg-2"> <input type="button" class = "btn btn-danger btn-sm" id ="delete" name ="delete" value="删除标签"/> </div> <div class="col-lg-2"> <input type="button" class ="btn btn-primary btn-sm" id ="add" value="创建标签" > </div> </div> @Page(paginator) </div>