`
kaowww153
  • 浏览: 72927 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

模拟struts 论坛 分页

阅读更多

参照网上修改了自己的分页代码:

最终效果:

分页工具类:

public class Pager<T> implements Serializable {

	private int pageNo = 1;
	private int pageSize = Constants.DEFAULT_PAGE_SIZE;
	private static final int LISTSTEP = 6;
	private String orderBy = null; 
	private Order order = Order.ASC; 
	private List<T> result = null;
	private int totalCount = -1;
	// 构造函数

	public Pager() {
	}

	public Pager(final int pageNo) {
		setPageNo(pageNo);
	}
	
	public Pager(final int pageNo, final int pageSize) {
		setPageNo(pageNo);
		setPageSize(pageSize);
	}

	// 查询参数相关函数

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(final int pageNo) {
		if(pageNo<1)
			this.pageNo = 1;
		else
			this.pageNo = pageNo;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(final int pageSize) {
		if(pageSize<1)
			this.pageSize = Constants.DEFAULT_PAGE_SIZE;
		else
			this.pageSize = pageSize;
	}

	public boolean isPageSizeSetted() {
		// return pageSize > 0;
		if (pageSize < 1) {
			pageSize = Constants.DEFAULT_PAGE_SIZE;
		}
		return true;
	}

	public String getOrderBy() {
		return orderBy;
	}

	public void setOrderBy(final String orderBy) {
		this.orderBy = orderBy;
	}

	public boolean isOrderBySetted() {
		return StringUtils.isNotBlank(orderBy);
	}

	public Order getOrder() {
		return order;
	}

	public void setOrder(final Order order) {
		if (Order.ASC.equals(order) || Order.DESC.equals(order)) {
			this.order = order;
		} else
			throw new IllegalArgumentException("Order should be 'desc' or 'asc'");
	}
	
	/**
	 * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的索引位置.
	 */
	public int getFirstIndex() {
		if (pageNo < 1 || pageSize < 1)
			return 0;
		else
			return ((pageNo - 1) * pageSize) < totalCount-1? ((pageNo - 1) * pageSize) : totalCount-1;
	}

	/**
	 * 是否已设置第一条记录记录在总结果集中的位置.
	 */
	public boolean isFirstIndexSetted() {
		return true;
	}

	/**
	 * 取得页内的记录列数.
	 */
	public List<T> getResult() {
		return result;
	}

	public void setResult(final List<T> result) {
		this.result = result;
	}

	/**
	 * 取得总记录数.
	 */
	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(final int totalCount) {
		this.totalCount = totalCount;
	}

	/**
	 * 计算总页数.
	 */
	public int getTotalPages() {
		if (totalCount < 1)
			return 0;

		return (totalCount + pageSize - 1) / pageSize;
	}

	/**
	 * 是否还有下一页.
	 */
	public boolean isHasNext() {
		return (pageNo + 1 <= getTotalPages());
	}

	/**
	 * 取得下一页
	 */
	public int getNextPage() {
		if (isHasNext())
			return pageNo + 1;
		else
			return pageNo;
	}

	/**
	 * 是否还有上一页.
	 */
	public boolean isHasPre() {
		System.out.println(pageNo+",.,.,.");
		return (pageNo - 1 >= 1);
	}

	/**
	 * 取得上一页.
	 */
	public int getPrePage() {
		if (isHasPre())
			return pageNo - 1;
		else
			return pageNo;
	}

	/**
	 * 获取页码
	 */
	public List<Integer> getPageNumbers() {
		int totalPages = getTotalPages();
		int startPageNo = 1;
		int currentPageNo = pageNo;
		int endPageNo = totalPages;
		List<Integer> pageNumbers = new ArrayList<Integer>();
		// 1 2 3 4 5 6 7 8
		if(endPageNo<=LISTSTEP+2){
		
			for(int i=0; startPageNo<=endPageNo; startPageNo++,i++) {
				pageNumbers.add(startPageNo);
			}
		}else{
			// 1,2,3,4,5,6,...,pagecount-1,pagecount
			if(currentPageNo < LISTSTEP){
				for (int i = 1; i <= LISTSTEP; i++) {
					pageNumbers.add(i);
				}
				pageNumbers.add(-1); // -1 表示之间有有...间隔
				pageNumbers.add(endPageNo-1);
				pageNumbers.add(endPageNo)	;
			} else if (currentPageNo > endPageNo - LISTSTEP + 1) { // 右边
				// 1,2,...pagecount-5,pagecount-4,pagecount-3,pagecount-2,pagecount-1,pagecount
				pageNumbers.add(1);
				pageNumbers.add(2);
				pageNumbers.add(-1);
				for (int i = endPageNo - LISTSTEP +1; i <= endPageNo; i++) {
					pageNumbers.add(i);
				}
			}else { // 中间
				// 1,2,...,curpage-1,curpage,curpage+1,...,pagecount-1,pagecount
				pageNumbers.add(1);
				pageNumbers.add(2);
				pageNumbers.add(-1);
				int offset = (LISTSTEP - 4) / 2;
				for (int i = currentPageNo - offset; i <= currentPageNo + offset; i++) {
					pageNumbers.add(i);
				}
				pageNumbers.add(-1);
				pageNumbers.add(endPageNo-1);
				pageNumbers.add(endPageNo)	;
			}	
		}
		return pageNumbers;
	}
	
}

 分页标签类:

public class PagerTag extends BodyTagSupport{
	private static final long serialVersionUID = 9161072674434807502L;

	public static final int DEFAULT_PAGE_STEP = 5;
	private String url;
	private Pager pager;

	public void setUrl(String url) {
		this.url = url;
	}

	public void setPager(Pager pager) {
		this.pager = pager;
	}

	@Override
	public int doEndTag() throws JspException {
		if (pager == null || pager.getTotalCount() == 0) {
			try {
				pageContext.getOut().println("<center></center>");
			} catch (IOException e) {
				throw new JspException(e);
			}
			return EVAL_PAGE;
		}
		
		int pageNo = pager.getPageNo();
		int totalPages = pager.getTotalPages();

		StringBuilder sb = new StringBuilder();
		sb.append("<form name='pageController' id='pageController' action='' method='post'>\r\n").append(
				(new StringBuilder("<input type='hidden' id='pageNo' name='pageNo' value='")).append(pageNo).append(
						"' />\r\n").toString());
		HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
		Enumeration enumeration = request.getParameterNames();
		String name = null;
		String value = null;
		while (enumeration.hasMoreElements()) {
			name = (String) enumeration.nextElement();
			value = request.getParameter(name);
			if (name.equals("pageNo")) {
				if (value != null && !"".equals(value))
					pageNo = Integer.parseInt(value);
					pager.setPageNo(pageNo);
			} else if(name.indexOf("content")==-1) {
				sb.append("<input type='hidden' name='").append(name).append("' value='").append(value).append(
						"'/>\r\n");
			}
		}
		
		//	sb.append((new StringBuilder("<span class='zfd yy5'>当前第")).append(pageNo).toString()).append("/").append(totalPages).append(
		//		"页 </span>").toString();
		if (pager.isHasPre()) {
			//sb.append("<a href='javascript:turnToPage(1)' title='首页' class='prev_page'>首页</a>\r\n");
			sb.append("<a href='javascript:turnToPage(").append(pager.getPrePage()).append(
					")' title='上一页' class='prev_page'>« 上一页</a>\r\n");
		} else {
			//sb.append("<span class='disabled prev_page'>首页</span>");
			sb.append("<span class='disabled prev_page'>« 上一页</span>\r\n");
		}

		// 处理pageNum
		List<Integer> pageNums = pager.getPageNumbers();
		for (int i = 0; i < pageNums.size(); i++) {
			
			if (pageNums.get(i) == pageNo) {
				
				sb.append("<span class='current'>"+ pageNums.get(i) + "</span>&nbsp;\r\n");
			}else if(pageNums.get(i)==-1){
				sb.append("<span > &hellip;  </span>");
			}else {
				sb.append("<a href='javascript:turnToPage(").append(pageNums.get(i)).append(
						")'>" + pageNums.get(i) + "</a>&nbsp;\r\n");
			}
		}
		if (pager.isHasNext()) {
			sb.append("<a href='javascript:turnToPage(").append(pager.getNextPage()).append(
					")' title='下一页' >下一页 »</a>\r\n");
			//sb.append("<a href='javascript:turnToPage(").append(totalPages).append(")' title='尾页' class='asxye-2 zfd yy5'>尾页</a>\r\n");
		} else {
			sb.append("<span class='disabled next_page'>下一页 »</span>\r\n");
			//sb.append("<span class='disabled next_page'>尾页</span>\r\n");
		}
		/*
		sb.append("<span class='zfd yy5'>跳转到&nbsp;<select onChange='turnToPage(this.value)'>\r\n");
		for (int i = 1; i <= totalPages; i++)
			if (i == pageNo)
				sb.append("  <option value='").append(i).append("' selected='selected'>\u7B2C").append(i).append(
						"页</option>\r\n");
			else
				sb.append("  <option value='").append(i).append("'>第").append(i).append("页</option>\r\n");
		sb.append("</select></span>\r\n");
		*/
		// 输入方式的跳转
		// sb.append("&nbsp;goto&nbsp;<input type='text'
		// onChange='turnToPage(this.value)'>\r\n");

		sb.append("</form>\r\n");

		// 翻页函数
		sb.append("<script language='javascript'>\r\n");
		sb.append("  function turnToPage(pageNo){\r\n");
		sb.append("    var form = document.pageController;\r\n");
		sb.append("    if(pageNo").append(">").append(totalPages).append(") {\r\n");
		sb.append("        pageNo=").append(totalPages).append(";\r\n");
		sb.append("    }\r\n");
		sb.append("    if(pageNo").append("< 1){\r\n");
		sb.append("        pageNo=1;\r\n");
		sb.append("    }\r\n");
		sb.append("    form.").append("pageNo").append(".value=pageNo;\r\n");
		sb.append("    form.action='").append(url).append("';\r\n");
		sb.append("    form.submit();\r\n");
		sb.append("  }\r\n");
		sb.append("</script>\r\n");
		try {
			pageContext.getOut().println(sb.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return EVAL_PAGE;
	}

	@Override
	public int doAfterBody() throws JspException {
		try {
			this.getBodyContent().writeOut(getPreviousOut());
		} catch (IOException e) {
			throw new JspException(e);
		}
		return SKIP_BODY;
	}
}

 然后配个分页标签

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
 <tlib-version>2.0</tlib-version>
 <short-name>hw</short-name>
 <uri>http://www.myframe.com/pager</uri>
 <tag>
    <description>分页标签</description>
    <name>pager</name>
       <tag-class>com.labixiaoxin.myframe.web.tag.PagerTag</tag-class>
    <body-content>JSP</body-content> 
    <attribute>
      <name>pager</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
      <type>java.lang.Object</type>
    </attribute>
    <attribute>
      <name>url</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>
</taglib>

 

分享到:
评论

相关推荐

    模拟百度(hao123导航)SSH框架

    非常全的一套ssh整合框架,里面有struts的分页技术,过滤器,搜索提示等等。。值得你下载,

    模拟当当网购物系统购物车分页显示

    功能模块分析清晰适合初学者,集合用运到了java中的重要框架,有助于你学习得理解

    模拟购物网站

    在Struts框架中,JSP用于前端展现,Servlet 用于控制,Ajax实现异步刷新,Action 用于处理前端页面JSP发来的请求,请求参数通过ActionForm进行传递,Action 在获得请求后通过调度业务系统进行做处理,最后将处理结果...

    低清版 大型门户网站是这样炼成的.pdf

    7.7.1 优秀的模拟浏览器httpclient 514 7.7.2 构建通用静态页面发布引擎 516 7.8 小结 518 第8章 通用新闻采集系统 519 8.1 新闻采集系统需求分析 519 8.2 新闻采集系统功能设计 520 8.3 使用正则表达式与...

    基于SSH模拟当当网项目(电子商务平台)

    --------当当网SSH重构---------- 1.DAO需要根据原有接口全部重构. ... 如果查询语句使用了join fetch,遇到分页情况下,采用假分页机制执行.(不会生成limit等分页查询命令,首先查所有,然后返回部分需要数据).

    讨论区BBS网站

    本系统采用分层次的、树状结构的留言显示,条理十分清晰,本系统采用Servlet 模拟Struts处理请求,方法巧妙,功能强大。本系统还采用连接池技术,解决了数据库瓶颈, 提高了运行速度。本系统还具备完善的分页...

    Java学习笔记-个人整理的

    {13.5}分页查询}{196}{section.13.5} {13.5.1}MySQL}{198}{subsection.13.5.1} {13.6}连接池}{199}{section.13.6} {13.6.1}Wrapper}{199}{subsection.13.6.1} {13.7}DAO}{199}{section.13.7} {13.8}java.util....

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA上百实例源码以及开源项目源代码

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

Global site tag (gtag.js) - Google Analytics