首先要写一个分页的类,主要代码如下:
package com.edie.bcs.utils;
public class PageQueryParam {
private int pageNumber = 1;
private int pageSize = 6;
//开始检索的地方
private int indexNum;
//总的页数
private int pageCount ;
public int getIndexNum() {
this.indexNum =(this.pageNumber-1)*this.pageSize;
return indexNum;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
}
然后再要写一个页面上实现“首页”“上一页”“下一页”“末页”的freemarker页面,例如是:querypage.ftl,代码如下:
<#-- 分页(Pager对象、链接URL、参数Map、最大页码显示数) -->
<#macro pager pager baseUrl parameterMap = {} maxShowPageCount = 4>
<#local pageNumber = pager.pageNumber />
<#local pageSize = pager.pageSize />
<#local pageCount = pager.pageCount />
<#local parameter = "" />
<#local parameter = parameter + "&pageSize=" + pageSize />
<#list parameterMap?keys as key>
<#if parameterMap[key] != null && parameterMap[key] != "">
<#local parameter = parameter + "&" + key + "=" + parameterMap[key] />
</#if>
</#list>
<#if baseUrl?contains("?")>
<#local baseUrl = baseUrl + "&" />
<#else>
<#local baseUrl = baseUrl + "?" />
</#if>
<#local firstPageUrl = baseUrl + "pageNumber=1" + parameter />
<#local lastPageUrl = baseUrl + "pageNumber=" + pageCount + parameter />
<#local prePageUrl = baseUrl + "pageNumber=" + (pageNumber - 1) + parameter />
<#local nextPageUrl = baseUrl + "pageNumber=" + (pageNumber + 1) + parameter />
<#if maxShowPageCount <= 0>
<#local maxShowPageCount = 4>
</#if>
<#local segment = ((pageNumber - 1) / maxShowPageCount)?int + 1 />
<#local startPageNumber = (segment - 1) * maxShowPageCount + 1 />
<#local endPageNumber = segment * maxShowPageCount />
<#if (startPageNumber < 1)>
<#local startPageNumber = 1 />
</#if>
<#if (endPageNumber > pageCount)>
<#local endPageNumber = pageCount />
</#if>
<#if (pageCount > 1)>
<div class="pager_area">
<ul class="pager">
<li class="pageInfo">
共 ${pageCount} 页
</li>
<#-- 首页 -->
<#if (pageNumber > 1)>
<li class="firstPage">
<a href="${firstPageUrl}">首页</a>
</li>
<#else>
<li class="firstPage">
<span>首页</span>
</li>
</#if>
<#-- 上一页 -->
<#if (pageNumber > 1)>
<li class="prePage">
<a href="${prePageUrl}">上一页</a>
</li>
<#else>
<li class="prePage">
<span>上一页</span>
</li>
</#if>
<#if (startPageNumber > 1)>
<li>
<a href="${baseUrl + "pageNumber=" + (pageNumber - 2) + parameter}">...</a>
</li>
</#if>
<#list startPageNumber .. endPageNumber as index>
<#if pageNumber != index>
<li>
<a href="${baseUrl + "pageNumber=" + index + parameter}">${index}</a>
</li>
<#else>
<li class="currentPage">
<span>${index}</span>
</li>
</#if>
</#list>
<#if (endPageNumber < pageCount)>
<li>
<a href="${baseUrl + "pageNumber=" + (pageNumber + 2) + parameter}">...</a>
</li>
</#if>
<#-- 下一页 -->
<#if (pageNumber < pageCount)>
<li class="nextPage">
<a href="${nextPageUrl}">下一页</a>
</li>
<#else>
<li class="nextPage">
<span>下一页</span>
</li>
</#if>
<#-- 末页 -->
<#if (pageNumber < pageCount)>
<li class="lastPage">
<a href="${lastPageUrl}">末页</a>
</li>
<#else>
<li class="lastPage">
<span>末页</span>
</li>
</#if>
</ul>
</div>
</#if>
</#macro>
在分页查询的Controller中:
/**
* 按姓名分页查询客户的信息
*
* @param customerName
* @param param
* @param model
* @return
*/
@SuppressWarnings("unchecked")
@RequestMapping("/findcustomerbyname")
public String pageQueryByName(String customerName, PageQueryParam param,
ModelMap model) {
String sql = "select customername,customersex,customerbirth,customertel,"
+ "customercompany,companyhomepage from customer where customername=? limit ?,?";
String sqlcount = "select count(*) from customer where customername=?";
int totalCount = jdbcTemplate.queryForInt(sqlcount,
new Object[] { customerName });
int pageCount;
if (totalCount % param.getPageSize() == 0) {
pageCount = totalCount / param.getPageSize();
} else {
pageCount = totalCount / param.getPageSize() + 1;
}
Object[] object = new Object[] { customerName, param.getIndexNum(),
param.getPageSize() };
List<Customer> list = jdbcTemplate.query(sql, object, new RowMapper() {
public Customer mapRow(ResultSet rs, int rowNum)
throws SQLException {
Customer customer = new Customer();
customer.setCustomerName(rs.getString("customername"));
customer.setCustomerSex(rs.getString("customersex"));
if (rs.getDate("customerbirth") != null) {
customer.setCustomerBirth(rs.getDate("customerbirth")
.toString());
System.out.println("customerbirth:"
+ rs.getDate("customerbirth").toString());
}
customer.setCustomerTel(rs.getString("customertel"));
customer.setCustomerCompany(rs.getString("customercompany"));
customer.setCompanyHomePage(rs.getString("companyhomepage"));
return customer;
}
});
param.setPageCount(pageCount);
model.addAttribute("param", param);
model.addAttribute("list", list);
System.out.println("size:" + list.size());
return "pageshowcustomer.ftl";
}
最后在显示分页查询内容的页面上:
<div class="changePage">
<div class="snPages">
<#import "querypage.ftl" as p>
<#assign parameterMap = {} />
<@p.pager pager = param baseUrl = "/BCS/pageshowcustomer.htm" parameterMap = parameterMap />
</div>
</div>