转载至http://liuxi1024.iteye.com/blog/707784

效果如图:

1、JSP规范1.1版本后增加了自定义标签库。实现自定义标签的步骤

(1)开发自定义标签处理类。

(2)建立*.tld文件。

(3)在web.xml中增加自定义标签的定义。

(4)在jsp中使用自定义标签。

2、自定义标签类

(1)继承javax.servlet.jsp.tagext.TagSupport

(2)标签类属性,及每个属性的getter和setter方法

(3)重写doStartTag或doEndTag方法。当jsp解析这个标签的时候,在“<”处触发 doStartTag
事件,在“>”时触发 doEndTag 事件。通常在 doStartTag 里进行初始化,流程选择操作,在 doEndTag
里后续页面输出控制。

  1. import java.io.IOException;
  2. import javax.servlet.jsp.JspException;
  3. import javax.servlet.jsp.tagext.TagSupport;
  4. import org.apache.commons.logging.Log;
  5. import org.apache.commons.logging.LogFactory;
  6. /**
  7. *
  8. * @author liuxi
  9. */
  10. public class PageThirdTag extends TagSupport {
  11. private static final Log log = LogFactory.getLog(PageTwoTag.class);
  12. private String formName;
  13. private String curPage;
  14. private String showPages;
  15. private String totalPages;
  16. private String PREVIOUS_PAGE = "上一页";
  17. private String NEXT_PAGE = "下一页 ";
  18. public String getHref(int number) {
  19. return "Javascript:ToPage(" + number + ");";
  20. }
  21. public String goHref(int number) {
  22. return " <a href=\"" + getHref(number) + "\" class=\"pagebox\">" + number + "</a>";
  23. }
  24. public int doEndTag() throws JspException {
  25. int showPages = Integer.parseInt(this.showPages);
  26. int curpage = Integer.parseInt(this.curPage);
  27. int totalPages = Integer.parseInt(this.totalPages);
  28. StringBuffer strBuf = new StringBuffer(512);
  29. // 总页数
  30. int pagecount = totalPages;
  31. // 初始化值
  32. if (curpage == 0) {
  33. curpage = 1;
  34. } else {
  35. if (curpage <= 0) {
  36. curpage = 1;
  37. }
  38. if (curpage > pagecount) {
  39. curpage = pagecount;
  40. }
  41. }
  42. strBuf.append("<style type='text/css'>");
  43. strBuf.append(".pagebox{margin-left:2px;padding:3px 5px 3px 5px; border:1px solid #fff; background-color:#ebebeb;color:#FFFFFF; font-size:12px;}");
  44. strBuf.append(".cpagebox{margin-left:2px;padding:3px 5px 3px 5px; border:1px gray; background-color:#ebebeb; color:red; font-size:12px;}");
  45. strBuf.append(".vpagebox{margin-left:2px;padding:3px 5px 3px 5px; background-color:#FFFFFF; color:#000000;font-size:12px;}");
  46. strBuf.append("</style>");
  47. strBuf.append("<script language='JavaScript' type='text/JavaScript'>");
  48. strBuf.append("function ToPage(p) { \n");
  49. strBuf.append(" window.document." + formName + ".pageNo.value=p;\n");
  50. strBuf.append(" window.document." + formName + ".submit();\n");
  51. strBuf.append("}</script>");
  52. if (curpage > 1) {
  53. strBuf.append("<a href=\"" + getHref(curpage - 1) + "\" class=\"pagebox\" >" + PREVIOUS_PAGE + "</a>");
  54. }
  55. // 分页
  56. if (pagecount <= showPages + 2) {
  57. for (int i = 1; i <= pagecount; i++) {
  58. if (i == curpage) {
  59. strBuf.append("<font class=\"cpagebox\">" + i + "</font>");
  60. } else {
  61. strBuf.append(goHref(i));
  62. }
  63. }
  64. } else {
  65. if (curpage < showPages) {
  66. for (int i = 1; i <= showPages; i++) {
  67. if (i == curpage) {
  68. strBuf.append("<font class=\"cpagebox\">" + i + "</font>");
  69. } else {
  70. strBuf.append(goHref(i));
  71. }
  72. }
  73. strBuf.append("<font class=\"vpagebox\">...</font>");
  74. strBuf.append(goHref(pagecount));
  75. } else if (curpage > pagecount - showPages + 1) { // 右边
  76. strBuf.append(goHref(1));
  77. strBuf.append("<font class=\"vpagebox\">...</font>");
  78. for (int i = pagecount - showPages + 1; i <= pagecount; i++) {
  79. if (i == curpage) {
  80. strBuf.append("<font class=\"cpagebox\">" + i
  81. + "</font>");
  82. } else {
  83. strBuf.append(goHref(i));
  84. }
  85. }
  86. } else { // 中间
  87. strBuf.append(goHref(1));
  88. //strBuf.append(goHref(2));
  89. strBuf.append("<font class=\"vpagebox\">...</font>");
  90. int offset = (showPages - 2) / 2;
  91. for (int i = curpage - offset; i <= curpage + offset; i++) {
  92. if (i == curpage) {
  93. strBuf.append("<font class=\"cpagebox\">" + i + "</font>");
  94. } else {
  95. strBuf.append(goHref(i));
  96. }
  97. }
  98. strBuf.append("<font class=\"vpagebox\">...</font>");
  99. strBuf.append(goHref(pagecount));
  100. }
  101. }
  102. // 显示下-页
  103. if (curpage != pagecount) {
  104. // 加上链接 curpage+1
  105. strBuf.append("<a href=\"" + getHref(curpage + 1) + "\" class=\"pagebox\" >" + NEXT_PAGE + "</a>");
  106. }
  107. strBuf.append("<input name='pageNo' type='hidden' size='3' length='3' />");
  108. try {
  109. pageContext.getOut().println(strBuf.toString());
  110. } catch (IOException e) {
  111. e.printStackTrace();
  112. log.debug(e.getMessage());
  113. }
  114. return EVAL_PAGE;
  115. }
  116. public String getFormName() {
  117. return formName;
  118. }
  119. public void setFormName(String formName) {
  120. this.formName = formName;
  121. }
  122. public String getCurPage() {
  123. return curPage;
  124. }
  125. public void setCurPage(String curPage) {
  126. this.curPage = curPage;
  127. }
  128. public String getShowPages() {
  129. return showPages;
  130. }
  131. public void setShowPages(String showPages) {
  132. this.showPages = showPages;
  133. }
  134. public String getTotalPages() {
  135. return totalPages;
  136. }
  137. public void setTotalPages(String totalPages) {
  138. this.totalPages = totalPages;
  139. }
  140. }

说明:

(1)如何输出到jsp页面:调用pageContext.getOut().println()。
(2)输出后如何作处理,函数会返回几个值之一。EVAL_PAGE 表示tag已处理完毕,返回jsp页面。

3、建立self.tld 文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <taglib xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
  5. version="2.1">
  6. <description>TEST Tag library</description>
  7. <display-name>TEST Tag</display-name>
  8. <tlib-version>1.0</tlib-version>
  9. <short-name>test</short-name>
  10. <uri>/test</uri>
  11. <tag>
  12. <description>Page Info</description>
  13. <name>pagethird</name>
  14. <tag-class>com.test.web.tag.PageThirdTag</tag-class>
  15. <body-content>empty</body-content>
  16. <attribute>
  17. <description>the name of the current form</description>
  18. <name>formName</name>
  19. <required>true</required>
  20. <rtexprvalue>false</rtexprvalue>
  21. </attribute>
  22. <attribute>
  23. <description>Show Records</description>
  24. <name>showPages</name>
  25. <required>true</required>
  26. <rtexprvalue>true</rtexprvalue>
  27. </attribute>
  28. <attribute>
  29. <description>Current Page</description>
  30. <name>curPage</name>
  31. <required>true</required>
  32. <rtexprvalue>true</rtexprvalue>
  33. </attribute>
  34. <attribute>
  35. <description>Total Pages</description>
  36. <name>totalPages</name>
  37. <required>true</required>
  38. <rtexprvalue>true</rtexprvalue>
  39. </attribute>
  40. </tag>
  41. </taglib>

说明:

short-name:taglib的名称。

name:tag的名字。

name:tag的名字。

body-content:指tag之间的内容。

required:是否必填属性。

rtexprvalue:是否支持动态传值。

4、web.xml中加入自定义标签定义

  1. <jsp-config>
  2. <taglib>
  3. <taglib-uri>test</taglib-uri>
  4. <taglib-location>/WEB-INF/tld/self.tld</taglib-location>
  5. </taglib>
  6. </jsp-config>

5、jsp中使用该自定义标签

  1. <%@ taglib prefix="test" uri="test" %>
  1. <test:pagethird formName="pictureForm" showPages="${ pageBean.showPages }" curPage="${ pageBean.pageNo }" totalPages="${ pageBean.totalPages }"/>

6、over

(转)java web自定义分页标签的更多相关文章

  1. Java自定义分页标签的实现

    主要字段含义: 页号 pagaNo页面大小 pageSize总记录条数 recordCount计算本次一共分多少页 myPageSize页号显示开始 start 页号显示结束 end PageTag需 ...

  2. Struts2自定义标签4自定义分页标签

    第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  3. Java Web自定义MVC框架详解 (转)

    转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...

  4. Java Web -【分页功能】详解

    分页简介 分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示. 使用场景: 当取到的数据量达到一定的时候,就需要使用分页来进行数据分割. 当我们不使用分页功能的时候,会面 ...

  5. SSH自定义分页标签

    本文参考文章:http://blog.csdn.net/qjyong/article/details/3240303 一.标签处理类: package cn.conris.sys.form; impo ...

  6. 自定义分页标签,并使分页标签能获得url中的参数

    如题,要实现一个分页功能,其次,要让分页标签“智能一点”,在分页时能自动带上url后面的参数 <tag> <description>分页标签</description&g ...

  7. Django 中的自定义分页标签

    目录结构: 1.在应用下,migrations的同级目录创建templatetags目录(主要两个文件,包含__init__.py) 2.创建分页标签(pagetag.py) #!/usr/bin/e ...

  8. Java Web 自定义标签

    1.   自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...

  9. Java Web(七) JSTL标签库

    在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为.行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它 ...

随机推荐

  1. 简单的Slony-I设置实例 II

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面: PostgreSQL集群方案相关索引页     回到顶级页面:PostgreSQL索引页 接前面例子, 简单的Slony-I设置实例 这次我 ...

  2. [WC2010][BZOJ1758]重建计划-[二分+分数规划+点分治]

    Description 传送门 Solution 看到那个式子,显然想到分数规划...(不然好难呢) 然后二分答案,则每条边的权值设为g(e)-ans.最后要让路径长度在[L,U]范围内的路径权值&g ...

  3. spark读取mongodb数据写入hive表中

    一 环境: spark-: hive-; scala-; hadoop--cdh-; jdk-1.8; mongodb-2.4.10; 二.数据情况: MongoDB数据格式{    "_i ...

  4. 暗通道去雾算法的python实现

    何凯明博士的去雾文章和算法实现已经漫天飞了,我今天也就不啰里啰唆,直接给出自己python实现的完整版本,全部才60多行代码,简单易懂,并有简要注释,去雾效果也很不错. 在这个python版本中,计算 ...

  5. 新技能get,使用PHPStorm的deployment工具

    1. 工具栏 Tools - Deployment - Configuration 2. 添加一个服务端的配置信息 type 类型可以选择:FTP.local等. 填完信息别忘了点"Test ...

  6. centos7下python3与python2共存并且开启py3虚拟环境

    因为下载视频需要用到python3环境,今天在我的win上安装下载工具死活安装不上去,在大盘鸡上一下就安装成功了...可能在win上不兼容吧...无奈只能在大盘鸡上进行折腾了,顺便几个笔记 由于大盘鸡 ...

  7. jvm之GC知识点

    GCRoots:        虚拟机栈(栈帧中的局部变量表)引用的对象       方法区中静态属性引用的对象       方法去中常量引用的对象       本地方法栈中JNI(NATIVE方法) ...

  8. 3.0 zookeeper的集群介绍、搭建、环境、安装

    zookeeper是本身是一种分布式协调服务(英文意思动物园园长因为Hadoop就是一个动物园,storm.hadoop.kafkaka.hbaser都是基于zookeeper开发的) 原理:Zook ...

  9. flask_sqlalchemy介绍

    快速入门 Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展.有关完整的指南,请参阅 SQLAlchemy 的 API 文档. 一个最小应用 常见情 ...

  10. 基于C#的机器学习--模糊逻辑-穿越障碍

    模糊逻辑-穿越障碍 模糊逻辑.另一个我们经常听到的术语.但它的真正含义是什么?它是否意味着不止一件事?我们马上就会知道答案. 我们将使用模糊逻辑来帮助引导一辆自动驾驶汽车绕过障碍,如果我们做得正确,我 ...