闲的无聊,用spring3的mvc写了一个google的分页,这个小列子是基于注解的控制部分如下package com.my.google;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.my.common.Dispatcher;
/**
* @author 姜绵岳
* @version 创建时间:2011-4-9 下午05:02:51
* 一个类似google的分页的Action
*/
@Controller
public class GoogleController{
/**
* 一个类似谷歌的分页
* @return
*/
@RequestMapping("/google")
public String google(HttpServletRequest request,HttpServletResponse response){
String pageNum=request.getParameter("page"); //当前页
int page=0;
if(null==pageNum||"".equals(pageNum)){
page=1;
}else{
page=Integer.parseInt(pageNum);
}
String forwardUrl="google.do?page=";
List<String> list=new ArrayList<String>(); //存放模拟数据
for(int i=0;i<126;i++){
list.add("name xuehan "+i);
}
Dispatcher dispath=new Dispatcher();
Map map=dispath.getDispatch(forwardUrl, page, 10, list);
request.setAttribute("list",map.get("list"));
request.setAttribute("tag",map.get("tag"));
return "google";
}
}
package com.my.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author 姜绵岳
* @version 创建时间:2011-4-9 下午05:08:59 类说明
*/
public class Dispatcher<T> {
/**
* action调用分页方法 参数:forwordUrl 分页url,page当前页数,count每页显示条数,list要分页的集合
*/
public Map getDispatch(String forwardUrl, int page, int count, List<T> list) {
int totalCount = list.size(); // 数据总条数
int totalPage = totalCount / count; // 总页数
if (totalCount % count > 0) {
totalPage = totalCount / count + 1; // 如果总条数%总页数大于0侧总页数加1
}
if (page < 0) {
page = 1; // 如果当前页数小于1,设为1
}
if (page > totalCount) {
page = totalCount;// 如果当前页数大于总
}
int currentCount = (page-1) * count; // 当前提条数
int endCount = 0; // 结束条数
if (totalCount - currentCount >= count) {
endCount = currentCount + count;
} else {
endCount = totalCount - 1;
}
List newList = new ArrayList();// 存放返回集合
System.out.println("current " + currentCount + " end" + endCount);
for (int i = currentCount; i <= endCount; i++) {
newList.add(list.get(i));
}
// 获得分页字符串
String tag = getTag(forwardUrl, page, totalPage, currentCount);
Map map = new HashMap();
map.put("list", newList);
map.put("tag", tag);
return map;
}
/**
* 分页标签书写
*
* @param forwardUrl
* @param page
* @param totalPage
* @param currentCount
* @return
*/
private String getTag(String forwardUrl, int page, int totalPage,
int currentCount) {
StringBuffer sb = new StringBuffer();
if(1!=page){
sb.append("<a href='" + forwardUrl + (page - 1) + "'>" + "上一页"
+ "</a> ");
}
if (totalPage <= 20) {
if (totalPage >= 10) {
if (totalPage - page > 10) {
for (int i = 1; i < page + 10; i++) {
if (i == page) {
sb.append(i + " ");
continue;
}else{
sb.append("<a href='" + forwardUrl + i + "'>" + i
+ "</a> ");
}
}
} else {
for (int i = 1; i <= totalPage; i++) {
if (i == page) {
sb.append(i + " ");
continue;
}
sb.append("<a href='" + forwardUrl + i + "'>" + i
+ "</a> ");
}
}
} else {
for (int i = 1; i < totalPage; i++) {
if (i == page) {
sb.append(i + " ");
continue;
}
sb.append("<a href='" + forwardUrl + i + "'>" + i
+ "</a> ");
}
}
} else if (totalPage > 20) {
if (page > 10) {
if (totalPage - page > 10) {
for (int i = page - 10; i < page + 10; i++) {
if (i == page) {
sb.append(i + " ");
continue;
} else {
sb.append("<a href='" + forwardUrl + i + "'>" + i
+ "</a> ");
}
}
} else {
for (int i = page - 10; i <= totalPage; i++) {
if (i == page) {
sb.append(i + " ");
continue;
} else {
sb.append("<a href='" + forwardUrl + i + "'>" + i
+ "</a> ");
}
}
}
} else {
for (int i = 1; i < page + 10; i++) {
if (i == page) {
sb.append(i + " ");
continue;
}
sb.append("<a href='" + forwardUrl + i + "'>" + i
+ "</a> ");
}
}
}
if(totalPage!=page){
sb.append("<a href='" + forwardUrl + (page + 1) + "'>" + "下一页"
+ "</a> ");
}
return sb.toString();
}
}