`
xuehaipeng
  • 浏览: 52505 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

tld标签分页处理

    博客分类:
  • java
阅读更多
my-tag.tld
<?xml  version="1.0"  encoding="utf-8" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
    <tlib-version>1.0</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>mytag</short-name>
 <uri>/mytag</uri>
 <!-- 继承struts2标签ComponentTagSupport -->
    <tag>
     <name>page</name>
        <tag-class>com.itmg.tools.mytags.PageTag</tag-class>
  <attribute>
      <name>action</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
      <name>index</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
      <name>maxIndex</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
      <name>size</name>
      <required>true</required>
      <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
   <name>groupSize</name>
   <required>false</required>
   <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
      <name>styleClass</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
  </attribute>
  <attribute>
      <name>theme</name>
      <required>false</required>
      <rtexprvalue>true</rtexprvalue>
  </attribute>
    </tag>
</taglib>


PageBean.java
package com.itmg.tools.page;

/**
 * 分页信息的数据模型
 *@author Jason
 */
public class PageBean implements java.io.Serializable{
	private static final long serialVersionUID = 1L;
	
	private int offset;//偏离量

	private int length;
	private int begin;
	private int end;
	private int total;
	private int curPage;
	private int totalPage;

    private int startPage;
    private int endPage;

    private int gotoPage;//要到哪一页去

    public PageBean() {
    }

    public int getStartPage() {
        return startPage;
    }

    public void setStartPage(int startPage) {
        this.startPage = startPage;
    }

    public int getEndPage() {
        return endPage;
    }

    public void setEndPage(int endPage) {
        this.endPage = endPage;
    }


    public int getOffset() {
        return offset;
    }

    public void setOffset(int offset) {
        this.offset = offset;
    }

    public int getLength() {
        return length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public int getBegin() {
        return begin;
    }

    public void setBegin(int begin) {
        this.begin = begin;
    }

    public int getEnd() {
        return end;
    }

    public void setEnd(int end) {
        this.end = end;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getCurPage() {
        return curPage;
    }

    public void setCurPage(int curPage) {
        this.curPage = curPage;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

	public int getGotoPage() {
		return gotoPage;
	}

	public void setGotoPage(int gotoPage) {
		this.gotoPage = gotoPage;
	}
}



PageHandler.java
package com.itmg.tools.page;

import javax.servlet.http.HttpServletRequest;
import com.itmg.util.Constants;

/**
 * 分页处理类,处理分页的逻辑
 * 
 * @author Jason
 */
public class PageHandler {

	/**
	 * 得到初始化的分页信息
	 * 
	 * @param request
	 * @return
	 */
	public static PageBean initPage(HttpServletRequest request) {
		int length = Constants.PART_PAGE_PER_COUNT;
		int offset = 0;
		int gotoPageIndex = 1;
		int total = 0;
		PageBean page = new PageBean();
		page.setOffset(offset);
		page.setLength(length);
		page.setGotoPage(gotoPageIndex);
		page.setTotal(total);
		return page;
	}

	/**
	 * 得到初始化的分页信息
	 * 
	 * @return
	 */
	public static PageBean initPage() {
		int length = Constants.PART_PAGE_PER_COUNT;
		int offset = 0;
		int gotoPageIndex = 1;
		int total = 0;
		PageBean page = new PageBean();
		page.setOffset(offset);
		page.setLength(length);
		page.setGotoPage(gotoPageIndex);
		page.setTotal(total);
		return page;
	}

	/**
	 * 根据传入的PageBean的total,offset,已经请求的动作,等信息 处理出完成此请求动作,正确的分页信息 请求的动作包括

	 * 
	 * 上一页,下一页,具体某页等

	 * 
	 * 
	 * 分页信息包括 数据总数,从那条数据开始取数,取多少条等

	 * 
	 * 
	 * @param page
	 * @throws Exception
	 */
	public static PageBean handle(PageBean page) throws Exception {
		int offset, curPage, begin, end, total, totalPage, gotoPage, length, startPage, endPage;
		offset = page.getOffset();
		curPage = page.getCurPage();
		begin = page.getBegin();
		end = page.getEnd();
		total = page.getTotal();
		totalPage = page.getTotalPage();
		gotoPage = page.getGotoPage();
		length = page.getLength();
		startPage = page.getStartPage();
		endPage = page.getEnd();

		if (gotoPage != 1) {
			offset = length * (gotoPage - 1);
		}
		begin = offset + 1;
		if (offset + length > total)
			end = total;
		else
			end = offset + length;

		curPage = offset / length + 1;
		if (total % length == 0) {
			totalPage = total / length;
		} else {
			totalPage = total / length + 1;
		}

		startPage = curPage - 5;
		if (startPage < 1)
			startPage = 1;
		endPage = startPage + 9;
		if (endPage > totalPage)
			endPage = totalPage;
		if (end == 0)
			begin = 0;

		page.setOffset(offset);
		page.setLength(length);
		page.setBegin(begin);
		page.setEnd(end);
		page.setCurPage(curPage);
		page.setEndPage(endPage);
		page.setGotoPage(gotoPage);
		page.setLength(length);
		page.setStartPage(startPage);
		page.setTotalPage(totalPage);
		page.setTotal(total);

		return page;
	}

	/**
	 * 从HttpServletRequest 参数中 得到分页请求的值,设置在PageSelect中

	 * 
	 * 
	 * @param request
	 * @return
	 */
	public static PageBean getPageRequest(HttpServletRequest request) {
		int length = Constants.PART_PAGE_PER_COUNT;
		PageBean page = (PageBean) request.getAttribute(Constants.PART_PAGE_KEY);
		if (page == null) {
			page = new PageBean();
			page.setOffset(0);
			page.setLength(length);
			page.setGotoPage(1);
		}
		return page;
	}

	/**
	 * 把分页信息 设置在 request 的Attribute中

	 * 
	 * @param request
	 * @param page
	 *            分页信息
	 * @throws Exception
	 */
	public static void putPage(HttpServletRequest request, PageBean page) throws Exception {
		try {
			request.setAttribute(Constants.PART_PAGE_KEY, page);
		} catch (Exception e) {
			return;
		}
	}
}


PageTag.java 这里构造的链接是静态化链接,按自己的需求而定
package com.itmg.tools.mytags;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.struts2.ServletActionContext;

public class PageTag extends TagSupport {
	private static final long serialVersionUID = -1122449622265941160L;
	// action url
	private String action;
	// 当前页码
	private Integer index;
	// 最大页码数
	private Integer maxIndex;
	// 每页最多显示个数


	private Integer size;
	// 每组显示页码个数
	private Integer groupSize;
	// css
	private String styleClass;
	// 模板
	private String theme;

	@Override
	public int doStartTag() throws JspException {
		HttpServletRequest request = ServletActionContext.getRequest();	
		JspWriter out = pageContext.getOut();
		String keywords = request.getParameter("keywords");
        String category = request.getParameter("category");
        String minPrice = request.getParameter("minPrice");
        String maxPrice = request.getParameter("maxPrice");
        String sort = request.getParameter("sort");
        String isAuction = request.getParameter("isAuction");
        if(isAuction == null)
        	isAuction = "0";
		try {
			if(category != null && !"".equals(category)){
				if(minPrice != null || maxPrice != null)
					action += keywords+"/category/"+category+"/price/"+minPrice+"-"+maxPrice+"/";
				else
					action += keywords+"/category/"+category+"/";
			}else{
				if(minPrice != null || maxPrice != null)
					action += keywords+"/price/"+minPrice+"-"+maxPrice+"/";
				else
					action += keywords+"/";
			}
			StringBuffer html = new StringBuffer();
			String url = null;
			// 如果只有一页,则无需分页
			if (maxIndex > 1) {
				// 数字样式 << prev 1 2 3 4 5 6 7 8 9 10 next >>
				html.append("<div ");
				if (styleClass != null) {
					html.append("class='" + styleClass + "'>");
				} else {
					html.append(">");
				}
				if (index > 1) {
					// 当前不是第一组,要显示"<< Prev"
					// << Prev返回前一页

					if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort)))
						url = action + "/"+sort+"/"+isAuction;
					else
						url = action;
					
//					html.append("<a href='" + url + "'>先頭ページへ</a>&nbsp;");
					if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort)))
					    url = action + (index - 1) +"/"+sort+"/"+isAuction;
					else
						if(index>2)
							url = action + (index - 1);
						else
							url = action;
					html.append("<a rel=\"nofollow\" href='" + url + "'>前ページへ</a>&nbsp;");
				}
				// 从第begin页开始显示到end页,每组有groupSize个页数


				
				int begin, end;
				// groupSize不为空,分组显示,否则全部显示
				if (groupSize != null && groupSize < maxIndex) {
					// 每组显示页码个数的一半


					int halfGroupSize = (groupSize - 1) / 2;
					begin = (index - (halfGroupSize + 1)) > 0 ? (index - (halfGroupSize + 1)) : 1;
					end = (index + halfGroupSize) < maxIndex ? (index + halfGroupSize) : maxIndex;
					if (end == maxIndex) {
						if (maxIndex - groupSize < 1) {
							begin = maxIndex;
						}
						begin = maxIndex - groupSize;
					} else if (begin == 1 && end < maxIndex) {
						end = maxIndex > groupSize ? groupSize : maxIndex;
					}
				} else {
					begin = 1;
					end = maxIndex;
				}
				// groupSize个为一组显示


				for (int i = begin; i <= end; i++) {
					if (index == i) { // 当前页要加粗显示
						html.append("<span class=\"current\">" + i + "</span>&nbsp;");
					} else {
						if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort)))
							url = action + i + "/"+sort+"/"+isAuction;
						else
							if(i==1)
								url = action;
							else
								url = action + i;
						
						html.append("<a rel=\"nofollow\" href='" + url + "'>" + i + "</a>&nbsp;");
					}
				}
				if (index < maxIndex) {
					// >>:返回下一组最后一页


					// >:返回下一页

					if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort)))
						url = action + (index + 1) + "/"+sort+"/"+isAuction;
					else
						url = action + (index + 1);
					
					html.append("<a rel=\"nofollow\" href='" + url + "'>次ページへ</a>&nbsp;");
					
					if((isAuction != null && !"0".equals(isAuction)) || (sort != null && !"0".equals(sort)))
						url = action + maxIndex + "/"+sort+"/"+isAuction;
					else
						url = action + maxIndex;
					
//					html.append("<a href='" + url + "'>最終ページへ</a>");
				}
				html.append("</div>");
			}
			out.write(html.toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return (SKIP_BODY);
	}

	public String getAction() {
		return action;
	}

	public void setAction(String action) {
		this.action = action;
	}

	public Integer getIndex() {
		return index;
	}

	public void setIndex(Integer index) {
		this.index = index;
	}

	public Integer getMaxIndex() {
		return maxIndex;
	}

	public void setMaxIndex(Integer maxIndex) {
		this.maxIndex = maxIndex;
	}

	public Integer getSize() {
		return size;
	}

	public void setSize(Integer size) {
		this.size = size;
	}

	public Integer getGroupSize() {
		return groupSize;
	}

	public void setGroupSize(Integer groupSize) {
		this.groupSize = groupSize;
	}

	public String getStyleClass() {
		return styleClass;
	}

	public void setStyleClass(String styleClass) {
		this.styleClass = styleClass;
	}

	public String getTheme() {
		return theme;
	}

	public void setTheme(String theme) {
		this.theme = theme;
	}

}

在action中做如下定义:
//分页信息
		PageBean page = new PageBean();
		if (request.getParameter(Constants.PART_PAGE_PAGESEARCH) != null && request.getParameter(Constants.PART_PAGE_PAGESEARCH).equals("true")) {
			page = PageHandler.initPage(request);
		}
		page.setLength(Constants.PART_PAGE_PER_COUNT_10);
		if (index != null) {
			page.setGotoPage(index);
		} else {
			page.setGotoPage(1);
		}


jsp页面:
<div id="page">
				<div class="page_styl">
					<mytag:page index="${resultView.page.curPage}" maxIndex="${resultView.page.totalPage}" action="${pageContext.request.contextPath}/word/" size="${resultView.page.length}" styleClass="page_styl" groupSize="12"></mytag:page>
				</div>
		      </div>


css设置:
#page {
	margin: 40px auto;
	margin-bottom: 25px;
	text-align: center;
}

div .page_styl {
	text-align: center;
	padding-right: 1px;
	padding-left: 1px;
	padding-bottom: 3px;
	margin: 3px;
	padding-top: 3px;
	text-align: center;
	font-size: 14px;
}

div .page_styl a {
	border-right: #fff 1px solid;
	padding-right: 1px;
	border-top: #fff 1px solid;
	padding-left: 1px;
	padding-bottom: 1px;
	margin: 2px;
	border-left: #fff 1px solid;
	color: #0032ab;
	padding-top: 1px;
	border-bottom: #fff 1px solid;
	text-decoration: underline
}

div .page_styl span.current {
	border-right: #fff 1px solid;
	padding-right: 1px;
	border-top: #fff 1px solid;
	padding-left: 1px;
	font-weight: bold;
	padding-bottom: 1px;
	margin: 2px;
	border-left: #fff 1px solid;
	color: #000;
	padding-top: 1px;
	border-bottom: #fff 1px solid;
	/*	background-color: #d5d5d5;*/
}

div .page_styl span.disabled {
	border-right: #eee 1px solid;
	padding-right: 5px;
	border-top: #eee 1px solid;
	padding-left: 5px;
	padding-bottom: 2px;
	margin: 2px;
	border-left: #eee 1px solid;
	color: #ddd;
	padding-top: 2px;
	border-bottom: #eee 1px solid
}

最后在业务逻辑层:
page.setTotal(searchResult_temp.size());
page = PageHandler.handle(page);
0
0
分享到:
评论

相关推荐

    java+hibernate+jsp+tld+自定义标签分页

    本项目结合了Java、Hibernate、JSP以及TLD(Tag Library Descriptor)技术,实现了一个高效、易懂且实用的自定义标签分页解决方案。下面我们将详细探讨这些技术以及它们在分页中的应用。 首先,Java作为后端编程...

    java自定义标签分页

    在这个“java自定义标签分页”主题中,我们将深入探讨如何利用自定义标签来实现高效且易于维护的分页功能。 首先,自定义标签的定义通常涉及以下组件: 1. TLD(Tag Library Descriptor)文件:这是定义自定义标签...

    struts自制标签分页封装

    在 Struts 自制标签分页封装的场景中,我们通常是为了提高应用的可维护性和易用性,通过自定义标签来实现页面的动态分页功能。在不依赖 Struts 1.3 框架包的情况下,我们可以自己编写相关的组件来达到相同的效果。 ...

    Struts2自定义分页标签

    4. **创建分页标签库**:Struts2支持自定义标签,你可以创建一个`.tld`文件来定义分页标签。标签库应该包含开始、结束、上一页、下一页等标签,以便在视图层中方便地使用。 5. **实现标签处理类**:对应的Java类...

    强大的自定义标签分页,内有说明

    "强大的自定义标签分页"是指通过自定义JSP标签来实现灵活、高效的分页功能。这种方式可以提供更高的定制性,使得开发者可以根据项目需求进行个性化的设计和调整。 首先,我们来了解自定义标签。在Java Web开发中,...

    一个用于分页的自定义标签

    1. **标签库描述符(TLD)**:在TLD文件中,开发者会声明这个分页标签,包括标签的名字、属性(如当前页数、总页数等)、以及指向标签处理类的引用。 ```xml &lt;name&gt;paging &lt;tag-class&gt;...

    JSP 利用标签实现分页技术

    在处理大量数据时,分页技术是必不可少的,它可以帮助用户更有效地浏览和管理信息。本主题将深入探讨如何使用JSP自定义标签来实现分页功能,这将使代码更加整洁,提高可维护性,并为用户提供更好的用户体验。 首先...

    一个基于分页的标签处理程序

    在本案例中,分页处理程序作为一个自定义标签,可以方便地嵌入到JSP页面中,以处理分页显示数据的需求。 分页通常涉及到以下几个关键部分: 1. **页面链接生成**:根据当前页码和总页数,生成可供用户点击的页面...

    自定义标签分页

    例如,你可以创建一个名为`fenyeTag.tld`的文件,其中包含分页标签的相关信息,如标签名称、描述、属性等。 2. **编写Java类**:创建处理标签逻辑的Java类,该类通常需要继承`javax.servlet.jsp.tagext.TagSupport`...

    jsp java自定义标签 分页 当前位置 循环遍历数据

    Java自定义标签的实现通常涉及两个主要部分:标签处理类(Tag Handler)和标签库描述文件(TLD,Tag Library Descriptor)。 在本例中,我们继承了`javax.servlet.jsp.tagext.TagSupport`类来创建自定义标签处理类...

    jsp自定义分页标签

    自定义标签由两部分组成:标签处理类(Tag Handler)和标签库描述文件(TLD, Tag Library Descriptor)。 二、创建自定义分页标签 1. **编写Tag Handler类** 分页标签的处理类通常需要实现`javax.servlet.jsp....

    Taglib自定义标签分页

    本项目“Taglib自定义标签分页”提供了一个完整的解决方案,它实现了在网页上进行分页显示的功能,无需在每个JSP页面中重复编写分页代码,极大地提高了开发效率和代码复用性。 首先,我们需要了解自定义标签的基本...

    分页标签组件.rar

    分页标签组件的工作原理是通过自定义TLD(Tag Library Descriptor)文件,定义标签行为,并在JSP页面中使用这些标签来实现分页功能。`papertag.tld`文件就是这个组件的配置文件,它定义了标签的属性、方法和作用域等...

    java自定义标签 分页标签 whaosoft 143zh

    `pagesetDemo`这个示例项目可能会包含一个JSP页面,展示了如何在页面中使用这个分页标签,以及一个对应的Java类来处理分页逻辑。通过查看这个项目,开发者可以了解自定义标签的实际应用,以及如何将它们整合到自己的...

    分页工具条自定义标签

    总结起来,`分页工具条自定义标签`是一个通过自定义JSP标签实现的分页功能,它的核心在于`page.tld`配置文件和对应的标签处理类。通过这种方式,开发者可以方便地自定义分页样式和逻辑,提升项目的可维护性和可扩展...

    struts标签分页(实用)

    总结,Struts标签分页是一种高效且灵活的方式,它将分页逻辑封装在自定义标签中,使得JSP页面更简洁,同时降低了视图与业务逻辑的耦合度。通过学习和实践,你可以更好地掌握这一实用技巧,并将其应用于各种Java Web...

    实用java分页标签

    Java分页标签是Java Web开发中的一个重要概念,它主要用于处理大量数据的展示,尤其是在数据库查询结果需要在网页上以多页形式呈现时。这个技术可以让用户更方便地浏览和导航大量的信息,而不会一次性加载所有数据...

    自定义分页标签 Java

    总结来说,自定义分页标签Java涉及到的知识点包括JSP标签库的创建、Java标签处理类的编写、数据库交互与SQL操作、请求参数处理、数据模型的设计以及优化策略。通过熟练掌握这些知识点,开发者可以构建出高效、灵活的...

Global site tag (gtag.js) - Google Analytics