闲的无聊,用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 */@Controllerpublic 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="; Listlist=new ArrayList (); //存放模拟数据 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{ /** * action调用分页方法 参数:forwordUrl 分页url,page当前页数,count每页显示条数,list要分页的集合 */ public Map getDispatch(String forwardUrl, int page, int count, List 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(" " + "上一页" + " "); } 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(" " + i + " "); } } } else { for (int i = 1; i <= totalPage; i++) { if (i == page) { sb.append(i + " "); continue; } sb.append(" " + i + " "); } } } else { for (int i = 1; i < totalPage; i++) { if (i == page) { sb.append(i + " "); continue; } sb.append(" " + i + " "); } } } 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(" " + i + " "); } } } else { for (int i = page - 10; i <= totalPage; i++) { if (i == page) { sb.append(i + " "); continue; } else { sb.append(" " + i + " "); } } } } else { for (int i = 1; i < page + 10; i++) { if (i == page) { sb.append(i + " "); continue; } sb.append(" " + i + " "); } } } if(totalPage!=page){ sb.append(" " + "下一页" + " "); } return sb.toString(); }}