PageDTO.java
action设置:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 分页DTO
*
* @author jiann
*
* 2014年3月5日
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class PageDTO implements Serializable {
private static final long serialVersionUID = 1L;
// 中间页数
private List<Integer> pages;
//当前页
private int thisPage;
// 上一页
private int beforePage;
// 下一页
private int afterPage;
// 首页
private int startPage;
// 最后一页
private int endPage;
private String url;
public static PageDTO getPageDTO(GridParamDTO param, Long totalCount,
Integer showPageCount) {
PageDTO pageDto = new PageDTO();
// 最大页数
int lastPage = (int) Math.ceil((double) totalCount / param.getRows());
if (param.getPage() < 1) {
param.setPage(1);
} else if (param.getPage() > lastPage) {
param.setPage(lastPage);
}
// 页面最多显示页数的最大页
int maxPage = param.getPage() + (showPageCount - 2);
// 页面最多显示页数的最小页
int minPage = 1;
// 判断最大页是否大于最后一页
if (maxPage >= lastPage) {
// 如果当前页数最大页大于最后一页,按照最后一页计算
minPage = (param.getPage() - (maxPage - lastPage) - 1) <= 0 ? 1
: (param.getPage() - (maxPage - lastPage) - 1);
maxPage = lastPage;
} else {
minPage = (param.getPage() - 1) <= 0 ? 1 : (param.getPage() - 1);
maxPage = minPage + (showPageCount - 1);
}
List<Integer> pages = new ArrayList<Integer>();
for (int i = minPage; i <= maxPage; i++) {
pages.add(i);
}
// 上一页
int beforePage = param.getPage() - 1;
if (beforePage <= 0) {
beforePage = 1;
}
// 下一页
int afterPage = param.getPage() + 1;
if (afterPage > lastPage) {
afterPage = lastPage;
}
pageDto.setPages(pages);
pageDto.setStartPage(1);
pageDto.setEndPage(lastPage);
pageDto.setBeforePage(beforePage);
pageDto.setAfterPage(afterPage);
pageDto.setUrl(param.getUrl());
pageDto.setThisPage(param.getPage());
return pageDto;
}
}
action设置:
param.setRows(3);
param.setSidx("id");
param.setSord("desc");
param.setUrl("/ordering");
if (param.getPage() <= 0) {
param.setPage(1);
}
model.addAttribute("pageDto", PageDTO.getPageDTO(参数, 总条数, 每页显示条数));
页面调用page.ftl:
[#ftl]
<div class="pages">
[#if (pageDto.thisPage)!=(pageDto.startPage)&&(pageDto.thisPage)>0]
<a class="psges-step" href="${springpath}${pageDto.url}?page=${pageDto.startPage}">首页</a>
<a class="psges-step" href="${springpath}${pageDto.url}?page=${pageDto.beforePage}">上一页</a>
[#else]
<span>首页</span>
<span>上一页</span>
[/#if]
[#list pageDto.pages as page]
[#if (pageDto.thisPage)==page]
<a class="selected" href="${springpath}${pageDto.url}?page=${page}">${page}</a>
[#else]
<a href="${springpath}/${pageDto.url}?page=${page}">${page}</a>
[/#if]
[/#list]
[#if (pageDto.thisPage)!=(pageDto.endPage)]
<a class="psges-nest" href="${springpath}${pageDto.url}?page=${pageDto.afterPage}">下一页</a>
<a class="psges-nest" href="${springpath}${pageDto.url}?page=${pageDto.endPage}">尾页</a>
[#else]
<span>下一页</span>
<span>尾页</span>
[/#if]
</div>