不知道Play实现分页的方法有多少。
play提供的一种是这样的。
首先实现一个分页类:
public static class Page { private final int pageSize; private final long totalRowCount; private final int pageIndex; private final List<ServerModel> list; public Page(List<ServerModel> data, long total, int page, int pageSize) { this.list = data; this.totalRowCount = total; this.pageIndex = page; this.pageSize = pageSize; } public long getTotalRowCount() { return totalRowCount; } public int getPageIndex() { return pageIndex; } public List<ServerModel> getList() { return list; } public boolean hasPrev() { return pageIndex > 1; } public boolean hasNext() { return (totalRowCount / pageSize) >= pageIndex; } }
模版文件中的分页:
<ul> @if(currentPage.hasPrev) { <li class="prev"> <a href="@link(currentPage.getPageIndex - 1)">← 上一页</a> </li> } else { <li class="prev disabled"> <a>← 上一页</a> </li> } @if(currentPage.hasNext) { <li class="next"> <a href="@link(currentPage.getPageIndex + 1)">下一页 →</a> </li> } else { <li class="next disabled"> <a>下一页 →</a> </li> } </ul>
其中的link方法定义:
@link(newPage:Int) = @{ var sortBy = currentSortBy var order = currentOrder routes.Action.list(newPage) }
我在这里犯过一个错误,方法定义的最后一行不是来自routes文件而是写成了包路径,导致生成的href是
href="SimpleResult(200, Map(Content-Type -> text/html; charset=utf-8))"