基于spring3注解的google分页

闲的无聊,用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>&nbsp;");
		}
		if (totalPage <= 20) {
			if (totalPage >= 10) {
				if (totalPage - page > 10) {
					for (int i = 1; i < page + 10; i++) {
						if (i == page) {
							sb.append(i + "&nbsp;");
							continue;
						}else{
							sb.append("<a href='" + forwardUrl + i + "'>" + i
									+ "</a>&nbsp;");
						}
					
					}
				} else {
					for (int i = 1; i <= totalPage; i++) {
						if (i == page) {
							sb.append(i + "&nbsp;");
							continue;
						}
						sb.append("<a href='" + forwardUrl + i + "'>" + i
								+ "</a>&nbsp;");
					}
				}

			} else {
				for (int i = 1; i < totalPage; i++) {
					if (i == page) {
						sb.append(i + "&nbsp;");
						continue;
					}
					sb.append("<a href='" + forwardUrl + i + "'>" + i
							+ "</a>&nbsp;");
				}
			}
		} 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 + "&nbsp;");
							continue;
						} else {
							sb.append("<a href='" + forwardUrl + i + "'>" + i
									+ "</a>&nbsp;");
						}
					}
				} else {
					for (int i = page - 10; i <= totalPage; i++) {
						if (i == page) {
							sb.append(i + "&nbsp;");
							continue;
						} else {
							sb.append("<a href='" + forwardUrl + i + "'>" + i
									+ "</a>&nbsp;");
						}
					}
				}
			} else {
				for (int i = 1; i < page + 10; i++) {
					if (i == page) {
						sb.append(i + "&nbsp;");
						continue;
					}
					sb.append("<a href='" + forwardUrl + i + "'>" + i
							+ "</a>&nbsp;");
				}
			}
		}
		if(totalPage!=page){
			sb.append("<a href='" + forwardUrl + (page + 1) + "'>" + "下一页"
					+ "</a>&nbsp;");
		}
		return sb.toString();
	}
}

 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值