`

分页标签<w:pager>

    博客分类:
  • JAVA
 
阅读更多

1.WEB-INF/tlds/pager.tld

<?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>0.9</tlib-version>
   <!--标签头-->
	<short-name>w</short-name>
    <!--将来在页面用taglib引用时的uri属性,这部分的名字可以随便写,只要是符合HTTP网址形式的	-->
	<uri>http://javacrazyer.javaeye.com/tags/pager</uri>
	
	<!-- 自定义标签的描述信息 -->
	<tag>
		<!-- 标签名 -->
		<name>pager</name>
		<!-- 对应的标签处理类全限定名 -->
		<tag-class>com.kington.ibank.util.PagerTag</tag-class>
		<!-- 标签主体的类型 -->
		<body-content>empty</body-content>
		<!-- 当前页号属性的描述信息 -->
		<attribute>
			<!-- 属性名 -->
			<name>pageNo</name>
			<!-- 该属性是否为必要的 -->
			<required>true</required>
			<!-- 属性值是否可以在JSP运行时期动态产生 -->
			<rtexprvalue>true</rtexprvalue>
			<!-- 属性的数据类型 -->
			<type>int</type>
		</attribute>
		<!-- 总记录数属性的描述信息 -->
		<attribute>
			<name>recordCount</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<type>int</type>
		</attribute>
		<!-- 总页数属性的描述信息 -->
		<attribute>
			<name>pageSize</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<type>int</type>
		</attribute>
		<!-- 分页标签要跳转的URI属性的描述信息 -->
		<attribute>
			<name>url</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<type>java.lang.String</type>
		</attribute>
	</tag>
</taglib>


2.WEB-INF/web.xml

<filter>
    	<filter-name>securityFilter</filter-name>
    	<filter-class>com.kington.ibank.webapp.security.SecurityFilter</filter-class>
    </filter>
    
    <jsp-config>   
        <taglib>   
            <!-- 配置标签的引用地址 JSP页面中引用时使用-->   
            <taglib-uri>/eltag</taglib-uri>   
            <!-- 配置标签的TLD文件地址 -->   
            <taglib-location>/WEB-INF/tlds/ElTag.tld</taglib-location>   
        </taglib> 
         <taglib>   
            <!-- 配置标签的引用地址 JSP页面中引用时使用-->   
            <taglib-uri>/taglib</taglib-uri>   
            <!-- 配置标签的TLD文件地址 -->   
            <taglib-location>/WEB-INF/tlds/TagLib.tld</taglib-location>   
        </taglib>  
         <taglib>   
            <!-- 配置标签的引用地址 JSP页面中引用时使用-->   
            <taglib-uri>/mypage</taglib-uri>   
            <!-- 配置标签的TLD文件地址 -->   
            <taglib-location>/WEB-INF/tlds/pager.tld</taglib-location>   
        </taglib>  
           <taglib>
	      <taglib-uri>/ss3/urlIntercept</taglib-uri>
	      <taglib-location>/WEB-INF/tlds/security.tld</taglib-location>
    	</taglib>
    </jsp-config>   
    
    <listener>
        <listener-class>com.kington.ibank.util.SchedulerInit</listener-class>
  	</listener>


3.PageTag.java

package com.kington.ibank.util;

import java.io.IOException;
import java.util.Enumeration;

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

import org.apache.struts2.ServletActionContext;


/**
 * 分页标签处理类
 */
public class PagerTag extends TagSupport {
	private static final long serialVersionUID = 5729832874890369508L;
	private String url;         //请求URI
	private int pageSize = 20;  //每页要显示的记录数
	private int pageNo = 1;     //当前页号
	private int recordCount;    //总记录数

	@SuppressWarnings("unchecked")
	public int doStartTag() throws JspException {
		HttpServletRequest request= ServletActionContext.getRequest();
		String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort();
		int pageCount = (recordCount + pageSize - 1) / pageSize;  //计算总页数
		
		//拼写要输出到页面的HTML文本
		StringBuilder sb = new StringBuilder();
		if(recordCount == 0){
			sb.append("<strong>没有可显示的项目</strong>\r\n");
		}else{
			//页号越界处理
			if(pageNo > pageCount){		pageNo = pageCount;	}
			if(pageNo < 1){		pageNo = 1;	}
			
			sb.append("<form method=\"post\" action=\"").append(basePath+((HttpServletRequest) request).getContextPath()+this.url)
				.append("\" name=\"qPagerForm\">\r\n");
			//获取请求中的所有参数
			Enumeration<String> enumeration = request.getParameterNames();
			String name = null;  //参数名
			String value = null; //参数值
			//把请求中的所有参数当作隐藏表单域
			while (enumeration.hasMoreElements()) {
				name =  enumeration.nextElement();
				value = request.getParameter(name);
				// 去除页号
				if (name.equals("pageNo")) {
					if (null != value && !"".equals(value)) {
						pageNo = Integer.parseInt(value);
					}
					continue;
				}
				sb.append("<input type=\"hidden\" name=\"")
				  .append(name)
				  .append("\" value=\"")
				  .append(value)
				  .append("\"/>\r\n");
			}
	
			// 把当前页号设置成请求参数
			sb.append("<input type=\"hidden\" name=\"").append("pageNo")
				.append("\" value=\"").append(pageNo).append("\"/>\r\n");
			
			// 输出统计数据
		/**	sb.append("&nbsp;共<strong>").append(recordCount)
				.append("</strong>项")
				.append(",<strong>")
				.append(pageCount)
				.append("</strong>页:&nbsp;\r\n");**/
			sb.append("<ul>");
			
			//上一页处理
			if (pageNo == 1) {
				sb.append("<li><span class=\"disabled\">上一页")
					.append("</span></li>\r\n");
			} else {
				sb.append("<li><a href=\"javascript:turnOverPage(")
				  .append((pageNo - 1))
				  .append(")\">上一页</a></li>\r\n");
			}
			
			//如果前面页数过多,显示"..."
			int start = 1; 
			if(this.pageNo > 4){
				start = this.pageNo - 1;
				sb.append("<li><a href=\"javascript:turnOverPage(1)\">1</a></li>\r\n");
				sb.append("<li><a href=\"javascript:turnOverPage(2)\">2</a></li>\r\n");
				sb.append("<li><a>&hellip;</a></li>\r\n");
			}
			//显示当前页附近的页
			int end = this.pageNo + 1;
			if(end > pageCount){
				end = pageCount;
			}
			for(int i = start; i <= end; i++){
				if(pageNo == i){   //当前页号不需要超链接
					sb.append("<li><span class=\"current\">")
						.append(i)
						.append("</span></li>\r\n");
				}else{
					sb.append("<li><a href=\"javascript:turnOverPage(")
						.append(i)
						.append(")\">")
						.append(i)
						.append("</a></li>\r\n");
				}
			}
			//如果后面页数过多,显示"..."
			if(end < pageCount - 2){
				sb.append("<li><a>&hellip;</a></li>\r\n");
			}
			if(end < pageCount - 1){
				sb.append("<li><a href=\"javascript:turnOverPage(")
				.append(pageCount - 1)
				.append(")\">")
				.append(pageCount - 1)
				.append("</a></li>\r\n");
			}
			if(end < pageCount){
				sb.append("<li><a href=\"javascript:turnOverPage(")
				.append(pageCount)
				.append(")\">")
				.append(pageCount)
				.append("</a></li>\r\n"); 
			}
			
			//下一页处理
			if (pageNo == pageCount) {
				sb.append("<li><span class=\"disabled\">下一页")
					.append("</span></li>\r\n");
			} else {
				sb.append("<li><a href=\"javascript:turnOverPage(")
					.append((pageNo + 1))
					.append(")\">下一页</a></li>\r\n");
			}
	
			// 生成提交表单的JS
			sb.append("<script language=\"javascript\">\r\n");
			sb.append("  function turnOverPage(no){\r\n");
			sb.append("    if(no>").append(pageCount).append("){");
			sb.append("      no=").append(pageCount).append(";}\r\n");
			sb.append("    if(no<1){no=1;}\r\n");
			sb.append("    document.qPagerForm.pageNo.value=no;\r\n");
			sb.append("    document.qPagerForm.submit();\r\n");
			sb.append("  }\r\n");
			sb.append("</script>\r\n");
			sb.append("</ul>");
			sb.append("</form>\r\n");
		}
		//把生成的HTML输出到响应中
		try {
			pageContext.getOut().println(sb.toString());
		} catch (IOException e) {
			throw new JspException(e);
		}
		return SKIP_BODY;  //本标签主体为空,所以直接跳过主体
	}

	public void setUrl(String url) {
		this.url = url;
	}
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}
}


4.使用这个标签

<c:if test="${not empty pageModel.list}">
	<div class="pagination pagination-small pagination-centered">
		<c:if test="${reading == 0 }">
	<w:pager pageSize="${pageModel.recordPage}" pageNo="${pageModel.curPage}" url="/banks/member/member/messages.jhtml" recordCount="${pageModel.fullListSize}"/> 
</c:if>
<c:if test="${reading == 1 }">
	<w:pager pageSize="${pageModel.recordPage}" pageNo="${pageModel.curPage}" url="/banks/member/member/messageUnread.jhtml" recordCount="${pageModel.fullListSize}"/> 
</c:if>
	</div>
</c:if>


5.输出结果:

<div class="pagination pagination-small pagination-centered">
	<form method="post" action="http://localhost:8080/ibank/banks/member/member/messageUnread.jhtml" name="qPagerForm">
		<input type="hidden" name="reading" value="1"/>
		<input type="hidden" name="messagesTotalCount" value="56"/>
		<input type="hidden" name="pageNo" value="1"/>
		<ul><li><span class="disabled">上一页</span></li>
		<li><span class="current">1</span></li>
		<li><a href="javascript:turnOverPage(2)">2</a></li>
		<li><a>&hellip;</a></li>
		<li><a href="javascript:turnOverPage(9)">9</a></li>
		<li><a href="javascript:turnOverPage(10)">10</a></li>
		<li><a href="javascript:turnOverPage(2)">下一页</a></li>
			<script language="javascript">
			  function turnOverPage(no){
			    if(no>10){      no=10;}
			    if(no<1){no=1;}
			    document.qPagerForm.pageNo.value=no;
			    document.qPagerForm.submit();
			  }
			</script>
		</ul>
	</form>
</div>

分享到:
评论

相关推荐

    Struts2中使用标签实现组合查询和带分页的例子

    在Struts2框架中,`&lt;sx:&gt;`标签是Struts2 XWork库的一部分,用于增强JSP页面的功能,提供更强大的数据绑定和表单处理能力。本篇将重点讲解如何利用`sx:`标签实现组合查询和带分页功能。 首先,让我们了解下Struts2的...

    Jsp分页标签<authorization-module>

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而`&lt;authorization-module&gt;`看起来是一个自定义的JSP标签库,专门设计用于处理权限管理和分页功能。这种标签库使得开发者能够更方便地在...

    pager-taglib 分页标签使用

    `&lt;pager:page&gt;`是分页标签库中的主要标签,用于渲染分页链接。 二、使用步骤 1. 引入依赖:首先,在项目的`WEB-INF/lib`目录下添加`pager-taglib.jar`,或者如果你使用的是Maven或Gradle,需要在对应的构建文件中...

    pager-taglib分页标签

    `pager-taglib`是一个开源的JSP标签库,提供了一系列易于使用的分页标签,如`&lt;pager:page&gt;`、`&lt;pager:previous&gt;`、`&lt;pager:next&gt;`等,开发者只需在JSP页面中引入这些标签,就可以快速构建出具有分页功能的列表页面。...

    分页标签pager-taglib

    在使用`pager-taglib`时,你需要在JSP页面中引入标签库,这通常通过`&lt;%@ taglib %&gt;`指令完成,然后在页面中使用上述标签来构建分页结构。例如: ```jsp &lt;%@ taglib prefix="pager" uri="pager-taglib-2.0.tld" %&gt; ....

    pager标签库使用详解

    &lt;td valign="bottom"&gt;&lt;font face="arial,sans-serif" size="-1"&gt;Result Page:&lt;/font&gt;&lt;/td&gt; &lt;pg:prev null="true"&gt; &lt;% if (pageUrl != null) { %&gt; &lt;td align="right"&gt; &lt;a href="&lt;%=pageUrl %&gt;"&gt; &lt;img src=...

    非常好用的jsp分页标签

    它们通常由一个或多个标签库(Tag Library)提供,这些库包含了一系列与分页相关的标签,如`&lt;paging:start&gt;`, `&lt;paging:end&gt;`, `&lt;paging:current&gt;`, `&lt;paging:prev&gt;`, 和 `&lt;paging:next&gt;`等。 2. **使用方法**:...

    jsp pager-taglib分页资料

    2. **使用分页标签**:`pager-taglib`提供了一些关键的标签,如`&lt; pager:table &gt;`、`&lt; pager:page &gt;`和`&lt; pager:nav &gt;`等。`&lt; pager:table &gt;`用于包裹整个表格,`&lt; pager:page &gt;`定义每一页的内容,`&lt; pager:nav &gt;`...

    struts2+pager-taglib 实现分页小例子

    `&lt;s:pager&gt;`标签内部的`&lt;s:a&gt;`标签用于创建导航链接,允许用户跳转到不同的页码。 此外,Pager-taglib还提供了许多高级特性,如自定义样式、分页样式、链接生成逻辑等,可以根据项目需求进行定制。 总结来说,这个...

    pagerTaglib分页Demo

    在JSP页面中,你可以使用`&lt;pager:tag&gt;`标签来显示分页链接,如`&lt;pager:page&gt;`用于显示当前页,`&lt;pager:first&gt;`和`&lt;pager:last&gt;`用于显示首页和尾页的链接,`&lt;pager:prev&gt;`和`&lt;pager:next&gt;`则表示上一页和下一页。...

    pager-taglib分页组建

    在JSP页面中,你可以这样使用上述标签来实现分页: ```jsp &lt;pager:pageInfo totalCount="${totalCount}" currentPage="${currentPage}" /&gt; &lt;pager:links totalCount="${totalCount}" currentPage="${currentPage}" /...

    分页处理框架pager-taglib

    3. **编写JSP页面**:在JSP页面中使用`&lt;pager:xxx&gt;`标签进行分页展示。通常包括`&lt;pager:pageInfo&gt;`用于显示页码和`&lt;pager:list&gt;`用于展示每页的数据。 4. **后台处理**:在Servlet或Controller中,需要计算总记录数...

    pager-taglib分页方法

    Pager-taglib提供了两个主要的标签:`&lt;pg:pager&gt;`和`&lt;pg:pageInfo&gt;`。`&lt;pg:pager&gt;`用于生成分页链接,`&lt;pg:pageInfo&gt;`用于显示当前页和总页数等信息。 - `&lt;pg:pager&gt;`标签的基本结构如下: ```jsp &lt;pg:pager ...

    pager-taglib分页例子

    首先,`pager-taglib`提供了几个预定义的标签,如`&lt;pg:pager&gt;`、`&lt;pg:firstPage&gt;`、`&lt;pg:lastPage&gt;`、`&lt;pg:previousPage&gt;`和`&lt;pg:nextPage&gt;`等,这些标签可以帮助开发者快速创建分页链接。`&lt;pg:pager&gt;`是核心标签,...

    jpager分页标签(用于jsp页面中数据分页)

    - `&lt;pg:pager&gt;` 标签用于生成分页链接,它可以与数据遍历结合,生成相应的分页导航。基本用法如下: ```jsp &lt;pg:pager action="list.action" /&gt; ``` `action` 属性指定了分页请求的 URL,当用户点击分页链接时,会...

    pager-taglib.jar

    在这个例子中,`&lt;pager:page&gt;`标签用于包围整个分页结构,而`&lt;pager:first&gt;`、`&lt;pager:last&gt;`、`&lt;pager:prev&gt;`和`&lt;pager:next&gt;`则分别用于生成“首页”、“末页”、“上一页”和“下一页”的链接。 需要注意的是,...

    pager-taglib使用指南 .txt

    &lt;td valign=bottom&gt;&lt;font face=arial,sans-serif size=-1&gt;Result Page:&lt;/font&gt;&lt;/td&gt; &lt;pg:prev ifnull="true"&gt; &lt;% if (pageUrl != null) { %&gt; &lt;td align=right&gt;&lt;a href="&lt;%=pageUrl%&gt;"&gt;&lt;img src=...

    pager-taglib-2.0

    1. `&lt;pager:page&gt;`:这是核心标签,用于显示分页链接。它接受一系列参数,如当前页码、总页数、每页记录数等,自动生成对应的HTML代码。 2. `&lt;pager:previous&gt;`和`&lt;pager:next&gt;`:这两个标签分别用于生成上一页和...

    java-pager-tablib.rar_pager

    4. **在JSP中使用标签**:在JSP页面上,使用`&lt;pager:xxx&gt;`标签进行分页渲染。标签通常包括初始化、显示页码、处理点击事件等功能。 5. **渲染分页**:`pager-tablib`会根据配置生成相应的HTML代码,显示分页链接和...

    pager-taglib-2.0及使用方法

    Pager Taglib提供了一些主要的标签,如`&lt;pager:page&gt;`,`&lt;pager:prev&gt;`,`&lt;pager:next&gt;`等,它们可以帮助你轻松创建分页链接。下面是一个基本的使用示例: ```jsp &lt;pager:page total="100" current="5" url="/...

Global site tag (gtag.js) - Google Analytics