(转)java web自定义分页标签
转载至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
里后续页面输出控制。
- import java.io.IOException;
- import javax.servlet.jsp.JspException;
- import javax.servlet.jsp.tagext.TagSupport;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- /**
- *
- * @author liuxi
- */
- public class PageThirdTag extends TagSupport {
- private static final Log log = LogFactory.getLog(PageTwoTag.class);
- private String formName;
- private String curPage;
- private String showPages;
- private String totalPages;
- private String PREVIOUS_PAGE = "上一页";
- private String NEXT_PAGE = "下一页 ";
- public String getHref(int number) {
- return "Javascript:ToPage(" + number + ");";
- }
- public String goHref(int number) {
- return " <a href=\"" + getHref(number) + "\" class=\"pagebox\">" + number + "</a>";
- }
- public int doEndTag() throws JspException {
- int showPages = Integer.parseInt(this.showPages);
- int curpage = Integer.parseInt(this.curPage);
- int totalPages = Integer.parseInt(this.totalPages);
- StringBuffer strBuf = new StringBuffer(512);
- // 总页数
- int pagecount = totalPages;
- // 初始化值
- if (curpage == 0) {
- curpage = 1;
- } else {
- if (curpage <= 0) {
- curpage = 1;
- }
- if (curpage > pagecount) {
- curpage = pagecount;
- }
- }
- strBuf.append("<style type='text/css'>");
- strBuf.append(".pagebox{margin-left:2px;padding:3px 5px 3px 5px; border:1px solid #fff; background-color:#ebebeb;color:#FFFFFF; font-size:12px;}");
- strBuf.append(".cpagebox{margin-left:2px;padding:3px 5px 3px 5px; border:1px gray; background-color:#ebebeb; color:red; font-size:12px;}");
- strBuf.append(".vpagebox{margin-left:2px;padding:3px 5px 3px 5px; background-color:#FFFFFF; color:#000000;font-size:12px;}");
- strBuf.append("</style>");
- strBuf.append("<script language='JavaScript' type='text/JavaScript'>");
- strBuf.append("function ToPage(p) { \n");
- strBuf.append(" window.document." + formName + ".pageNo.value=p;\n");
- strBuf.append(" window.document." + formName + ".submit();\n");
- strBuf.append("}</script>");
- if (curpage > 1) {
- strBuf.append("<a href=\"" + getHref(curpage - 1) + "\" class=\"pagebox\" >" + PREVIOUS_PAGE + "</a>");
- }
- // 分页
- if (pagecount <= showPages + 2) {
- for (int i = 1; i <= pagecount; i++) {
- if (i == curpage) {
- strBuf.append("<font class=\"cpagebox\">" + i + "</font>");
- } else {
- strBuf.append(goHref(i));
- }
- }
- } else {
- if (curpage < showPages) {
- for (int i = 1; i <= showPages; i++) {
- if (i == curpage) {
- strBuf.append("<font class=\"cpagebox\">" + i + "</font>");
- } else {
- strBuf.append(goHref(i));
- }
- }
- strBuf.append("<font class=\"vpagebox\">...</font>");
- strBuf.append(goHref(pagecount));
- } else if (curpage > pagecount - showPages + 1) { // 右边
- strBuf.append(goHref(1));
- strBuf.append("<font class=\"vpagebox\">...</font>");
- for (int i = pagecount - showPages + 1; i <= pagecount; i++) {
- if (i == curpage) {
- strBuf.append("<font class=\"cpagebox\">" + i
- + "</font>");
- } else {
- strBuf.append(goHref(i));
- }
- }
- } else { // 中间
- strBuf.append(goHref(1));
- //strBuf.append(goHref(2));
- strBuf.append("<font class=\"vpagebox\">...</font>");
- int offset = (showPages - 2) / 2;
- for (int i = curpage - offset; i <= curpage + offset; i++) {
- if (i == curpage) {
- strBuf.append("<font class=\"cpagebox\">" + i + "</font>");
- } else {
- strBuf.append(goHref(i));
- }
- }
- strBuf.append("<font class=\"vpagebox\">...</font>");
- strBuf.append(goHref(pagecount));
- }
- }
- // 显示下-页
- if (curpage != pagecount) {
- // 加上链接 curpage+1
- strBuf.append("<a href=\"" + getHref(curpage + 1) + "\" class=\"pagebox\" >" + NEXT_PAGE + "</a>");
- }
- strBuf.append("<input name='pageNo' type='hidden' size='3' length='3' />");
- try {
- pageContext.getOut().println(strBuf.toString());
- } catch (IOException e) {
- e.printStackTrace();
- log.debug(e.getMessage());
- }
- return EVAL_PAGE;
- }
- public String getFormName() {
- return formName;
- }
- public void setFormName(String formName) {
- this.formName = formName;
- }
- public String getCurPage() {
- return curPage;
- }
- public void setCurPage(String curPage) {
- this.curPage = curPage;
- }
- public String getShowPages() {
- return showPages;
- }
- public void setShowPages(String showPages) {
- this.showPages = showPages;
- }
- public String getTotalPages() {
- return totalPages;
- }
- public void setTotalPages(String totalPages) {
- this.totalPages = totalPages;
- }
- }
说明:
(1)如何输出到jsp页面:调用pageContext.getOut().println()。
(2)输出后如何作处理,函数会返回几个值之一。EVAL_PAGE 表示tag已处理完毕,返回jsp页面。
3、建立self.tld 文件
- <?xml version="1.0" encoding="UTF-8" ?>
- <taglib xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
- version="2.1">
- <description>TEST Tag library</description>
- <display-name>TEST Tag</display-name>
- <tlib-version>1.0</tlib-version>
- <short-name>test</short-name>
- <uri>/test</uri>
- <tag>
- <description>Page Info</description>
- <name>pagethird</name>
- <tag-class>com.test.web.tag.PageThirdTag</tag-class>
- <body-content>empty</body-content>
- <attribute>
- <description>the name of the current form</description>
- <name>formName</name>
- <required>true</required>
- <rtexprvalue>false</rtexprvalue>
- </attribute>
- <attribute>
- <description>Show Records</description>
- <name>showPages</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description>Current Page</description>
- <name>curPage</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- <attribute>
- <description>Total Pages</description>
- <name>totalPages</name>
- <required>true</required>
- <rtexprvalue>true</rtexprvalue>
- </attribute>
- </tag>
- </taglib>
说明:
short-name:taglib的名称。
name:tag的名字。
name:tag的名字。
body-content:指tag之间的内容。
required:是否必填属性。
rtexprvalue:是否支持动态传值。
4、web.xml中加入自定义标签定义
- <jsp-config>
- <taglib>
- <taglib-uri>test</taglib-uri>
- <taglib-location>/WEB-INF/tld/self.tld</taglib-location>
- </taglib>
- </jsp-config>
5、jsp中使用该自定义标签
- <%@ taglib prefix="test" uri="test" %>
- <test:pagethird formName="pictureForm" showPages="${ pageBean.showPages }" curPage="${ pageBean.pageNo }" totalPages="${ pageBean.totalPages }"/>
6、over
(转)java web自定义分页标签的更多相关文章
- Java自定义分页标签的实现
主要字段含义: 页号 pagaNo页面大小 pageSize总记录条数 recordCount计算本次一共分多少页 myPageSize页号显示开始 start 页号显示结束 end PageTag需 ...
- Struts2自定义标签4自定义分页标签
第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- Java Web自定义MVC框架详解 (转)
转自:http://blog.csdn.net/jackfrued/article/details/42774459 最近给学生讲Java Web,希望他们能够在学完这部分内容后自己实现一个MVC框架 ...
- Java Web -【分页功能】详解
分页简介 分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示. 使用场景: 当取到的数据量达到一定的时候,就需要使用分页来进行数据分割. 当我们不使用分页功能的时候,会面 ...
- SSH自定义分页标签
本文参考文章:http://blog.csdn.net/qjyong/article/details/3240303 一.标签处理类: package cn.conris.sys.form; impo ...
- 自定义分页标签,并使分页标签能获得url中的参数
如题,要实现一个分页功能,其次,要让分页标签“智能一点”,在分页时能自动带上url后面的参数 <tag> <description>分页标签</description&g ...
- Django 中的自定义分页标签
目录结构: 1.在应用下,migrations的同级目录创建templatetags目录(主要两个文件,包含__init__.py) 2.创建分页标签(pagetag.py) #!/usr/bin/e ...
- Java Web 自定义标签
1. 自定义标签 由于在JSP页面中直接嵌入Java代码会导致页面开起来非常混乱,不方便和美工等配合工作,为此,JSP提供了自定义标签技术,可以代替直接嵌入Java代码的方式提供动态逻辑,但自定义 ...
- Java Web(七) JSTL标签库
在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为.行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求,它 ...
随机推荐
- 【MongoDB】NoSQL Manager for MongoDB 教程(基础篇)
前段时间,学习了一下mongodb,在客户端工具方面,个人认为 NoSQL Manager for MongoDB 是体验比较好的一个,功能也较齐全.可惜在找教程的时候,发现很难找到比较详细的教程,也 ...
- sqlite3日期数据类型
一.sqlite3日期数据类型,默认用datetime解析(根据stackflow) 使用时注意三点: 1. 创建表时,字段 DT 的类型为 date 2. 插入数据时,DT字段直接为 str 类型 ...
- day 11 名片管理系统
1 思路 #名片1 名片2 {"name":"alex","age":18,"QQ":12123} {"nam ...
- svn 配置仓库
1.新建一个空文件夹,然后点击--在此创建版本库. 2.修改conf 下的 svnserve.conf : anon-access = read auth-access = write passwor ...
- python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for
也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...
- nginx交替出现404和200
今天在调试接口的时候,发现一个奇怪的问题,服务器接口交替返回404和200错误. 排查的时候发现nginx下有大量的404错误记录,而tomcat有两个,一个有正常的访问记录,而另一个虽然启动正常,但 ...
- mtv网站架构模式适合企业网站应用吗?
mtv网站架构模式适合企业网站应用吗?有时候在思考这样一个问题. 从开发角度来说,本来mvc的进度慢了些,如果在数据库管理方面用sql的话,管理起来也不很方便.小企业网本来数据就不很多,也没什么太多安 ...
- Wacom发布Cintiq Companion 2
全新的Cintiq Companion 2是一款强大的平板电脑,让创意专业人士获得最佳的屏幕笔触,让创意随时随地进行.用户还可以在家中或工作时连接到Mac或PC电脑获得无与伦比的灵活性! 2015年1 ...
- ExpressJS基础概念及简单Server架设
NodeJS Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.js 的包 ...
- shell命令之at 执行一次性定时任务的用法
大家都知道crontab是执行定时任务的命令,那么at又是什么呢? 其实at也是定时任务命令,不同的是crontab是执行循环任务,at执行一次性任务 首先说下时间例子 Minute at no ...