`

分页标签<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中使用标签实现组合查询和带分页的例子

    NULL 博文链接:https://z18022893621.iteye.com/blog/1956098

    Jsp分页标签<authorization-module>

    authorization-module,标签实现包,在jsp开发项目中能轻松实现分页.无需自己手动写类.此包已经封装过. 只需在页面调用标签就OK了

    简单好用的分页标签,纯标签无须jsp脚本就可分页

    用例:&lt;me:table pageSize="2" border="0" width="40%" id="uid" table="user"&gt; &lt;me:column property="userName"/&gt;&lt;me:column property="password"/&gt;&lt;me:column&gt;${rows.userName}&lt;/me:column&gt; &lt;/me:table&gt; 内部使用...

    Struts2实现分页

    &lt;tr&gt;&lt;td colspan="5"&gt;&lt;a href="input"&gt;添加用户&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;s:if test="page.hasFirst"&gt;&lt;a href="list-users?page.pageNow=&lt;s:property value="1"/&gt;"&gt;首页&lt;/a&gt;&lt;/s:if&gt; &lt;s:if test="page.hasPre"&gt;&lt;a ...

    这是一个分页插件的jsp代码

    分页插件,页面添加代码&lt;div align="right" 10px;"&gt; &lt;pg:pager items="${total }" url="user/findAlluser.do" maxIndexPages="3" maxPageItems="5" export="currentPageNumber=pageNumber" scope="request"&gt; &lt;pg:...

    ssm分页查询

    div class="pager"&gt; &lt;font size="2"&gt;共 ${page.totalPageCount} 页&lt;/font&gt; &lt;font size="2"&gt;第 ${page.pageNow} 页&lt;/font&gt; &lt;a href="findNewsPage.service?pageNow=1"&gt;首页&lt;/a&gt; &lt;c:choose&gt; &lt;c:when test="${...

    谷歌分页插件

    :&lt;pg:pager url="oa/module!getModules" items="${total}" maxPageItems="10" export="currentPageNumber=pageNumber"&gt; &lt;pg:param name="pid"/&gt; &lt;pg:first&gt; &lt;a href="${pageUrl}"&gt;首页&lt;/a&gt; &lt;/pg:first&gt; &lt;pg:...

    前端分页jsp实现(二)

    采用jsp开发的前端分页,抽取成一个公共的jsp,在需要的界面采用 &lt;jsp:include&gt;引入就行,白色按钮,黑色选中样式 &lt;div style="display: block;height: 200px;"&gt; &lt;jsp:include page="pagination.jsp" flush="true"&gt;...

    java+hibernate实现分页

    java+hibernate实现分页 public String execute() throws Exception { System.out.println("Page:" + page); pagePlanList = ps.findPlantByPage(page, rowsPerPage); totalPage = ps.getPlanTotalPage...

    三大框架下分页源代码

    &lt;/tx:advice&gt; //tx标签代表时间传播 &lt;aop:config&gt;//切入 &lt;aop:pointcut id="allServiceMethod" expression="execution(* com.cstp.service.*.*(..))"/&gt; &lt;aop:advisor pointcut-ref="allServiceMethod" ...

    数据库分页脚本 jsp

    &lt;title&gt;ʽ&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;script type="text/javascript"&gt; function gotoSelectedPage() { var x = document.getElementById("navigatorForm"); //alert("Original action: " + x.action) x....

    Java Oracle分页处理

    &lt;title&gt;分页技术信息显示页面&lt;/title&gt; &lt;/head&gt; &lt;body bgcolor="green"&gt; &lt;table align="center"&gt; &lt;tr&gt; &lt;th&gt;用户名&lt;/th&gt; &lt;th&gt;密 码&lt;/th&gt; &lt;th&gt;生 日&lt;/th&gt; &lt;th&gt;职 业&lt;/th&gt; &lt;th&gt;性 别&lt;/th&gt; ...

    freemarker模板技术生成复杂word文档---解决了编码问题

    &lt;w:p &gt;&lt;w:r&gt;&lt;w:br w:type="page" /&gt;&lt;/w:r&gt;&lt;/w:p&gt; 分页符 基本步骤 1.用word做一个需要的格式模板,在需要替换的部分用“____”标记,存储为xml格式。 2.用myEclipse打开xml文档把“____”修改为freemarker标记 ...

    jsp+javaBean+servlet分页

    这是一个jsp+javaBean+servlet分页 主要功能 是通过 jstl标签中的 &lt;c:forEach 中的开始 begin和末尾end、list结果集的items属性 操作整个分页。大家有兴趣看看

    用Struts、Hibernate和display超简单实现分页

    说明:&lt;br&gt;一、含演示数据库建立脚本(较简单)&lt;br&gt;二、使用Struts、Hibernate和display超简单的实现了分页,你不用在页面上再写很多&lt;%%&gt;和很多判断,简单到只需要几行语句:&lt;br&gt;...table name="lst" cellspacing="0" ...

    SSH分页(详细的代码过程)

    SSH分页步骤 七、 接着就是jsp页面了 &lt;tr align="center"&gt; &lt;logic:equal value="true" name="page" property="hasPrePage"&gt; &lt;a href="getConsultationAUser.do?index=first&msg=${msg }"&gt;首页...

    《Java_Web应用开发实用教程》练习答案

    第2篇JSP高级技术分为7章,深入剖析了主流的Web开发框架,包括EL表达式语言、JSTL、自定义标签、Log4j、Hibernate、Spring框架;第3篇Java Web技术应用分为5章,介绍具体场景下的应用案例,包括注册登录模块的应用、...

    ajax、mysql、jstl实现分页、局部刷新界面

    &lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request....

    动易网站标签说明(电子书)

    &lt;UL&gt;{PE.DataSource id="InfoList&lt;XSL:VALUE-OF select="NodeID" /&gt;" datasource="图片栏目循环列表信息" nodeArray="&lt;XSL:VALUE-OF select="arrChildID" /&gt;" parentId="&lt;XSL:VALUE-OF select="$parentId" /&gt;" ...

    pager-taglib-2.0完整源码和Struts演示示例工程

    打开方法:&lt;br&gt;http://localhost:8080/pagertaglib/pageAction.do?pager.offset=0&lt;br&gt;pager-demo.jsp是原标签自带示例索引:&lt;br&gt;http://localhost:8080/pagertaglib/pager-demo.jsp&lt;br&gt;test1.jsp是一个页面直接读取...

Global site tag (gtag.js) - Google Analytics