java自定义分页标签_自定义分页标签--仿javaeye分页效果

效果如图:

a0f7fa81ebc86e2e7123be3b8c36294f.png

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解析这个标签的时候,在“”时触发 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 " " + number + "";

}

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("

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("");

strBuf.append("

strBuf.append("function ToPage(p) { \n");

strBuf.append("window.document." + formName + ".pageNo.value=p;\n");

strBuf.append("window.document." + formName + ".submit();\n");

strBuf.append("}");

if (curpage > 1) {

strBuf.append("" + PREVIOUS_PAGE + "");

}

// 分页

if (pagecount <= showPages + 2) {

for (int i = 1; i <= pagecount; i++) {

if (i == curpage) {

strBuf.append("" + i + "");

} else {

strBuf.append(goHref(i));

}

}

} else {

if (curpage < showPages) {

for (int i = 1; i <= showPages; i++) {

if (i == curpage) {

strBuf.append("" + i + "");

} else {

strBuf.append(goHref(i));

}

}

strBuf.append("...");

strBuf.append(goHref(pagecount));

} else if (curpage > pagecount - showPages + 1) { // 右边

strBuf.append(goHref(1));

strBuf.append("...");

for (int i = pagecount - showPages + 1; i <= pagecount; i++) {

if (i == curpage) {

strBuf.append("" + i

+ "");

} else {

strBuf.append(goHref(i));

}

}

} else { // 中间

strBuf.append(goHref(1));

//strBuf.append(goHref(2));

strBuf.append("...");

int offset = (showPages - 2) / 2;

for (int i = curpage - offset; i <= curpage + offset; i++) {

if (i == curpage) {

strBuf.append("" + i + "");

} else {

strBuf.append(goHref(i));

}

}

strBuf.append("...");

strBuf.append(goHref(pagecount));

}

}

// 显示下-页

if (curpage != pagecount) {

// 加上链接 curpage+1

strBuf.append("" + NEXT_PAGE + "");

}

strBuf.append("");

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 文件

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">

TEST Tag library

TEST Tag

1.0

test

/test

Page Info

pagethird

com.test.web.tag.PageThirdTag

empty

the name of the current form

formName

true

false

Show Records

showPages

true

true

Current Page

curPage

true

true

Total Pages

totalPages

true

true

说明:

short-name:taglib的名称。

name:tag的名字。

name:tag的名字。

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

required:是否必填属性。

rtexprvalue:是否支持动态传值。

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

test

/WEB-INF/tld/self.tld

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

6、over

2d71bc4f4723234857c8018544171944.png

大小: 1.4 KB

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2010-07-07 20:39

浏览 2889

评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java隐藏代码

不久前&#xff0c;我遇到了字符串中不可见字符的问题。 因为它们是不可见的&#xff0c;所以它们确实会引起混乱。 String a "Hello\u200e";String b "Hello\u200f";System.out.println(\ a " and " b " are length " a.length…

201521123052《Java程序设计》第5周学习总结

1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点。 1.2 可选&#xff1a;使用常规方法总结其他上课内容。 学习了更多markdown的知识 参考资料: 百度脑图 XMind 2. 书面作业 作业参考文件下载 1.代码阅读&#xff1a;Child压缩包内源代码package parent;publi…

Deepin安装Curl的方法

Deepin安装Curl的方法 以Deepin为例&#xff0c;只需一条命令即可&#xff1a; sudo apt-get install curl libcurl3 libcurl3-dev php5-curlposted on 2017-09-15 23:22 MissA-VeryGood 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/MissA-VerGood/p/752911…

亚信联创java面试题_亚信联创面试题及答案

1. Vector & ArrayList1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe)&#xff0c;而ArrayList的方法不是&#xff0c;由于线程的同步必然要影响性能&#xff0c;因此,ArrayList的性能比Vector好。2) 当Vector或ArrayList中的元素超过它的初始大小时,…

HTTP协议之http状态码详解

什么是HTTP状态码 HTTP状态码的作用是&#xff1a;Web服务器用来告诉客户端&#xff0c;发生了什么事。 状态码位于HTTP Response 的第一行中&#xff0c;会返回一个”三位数字的状态码“和一个“状态消息”。 ”三位数字的状态码“便于程序进行处理&#xff0c; “状态消息”更…

有用的Ant构建标签

问题&#xff1a; 如何在ant文件中执行以下任务&#xff1f; 制作zip文件。 运行命令。 将文件复制到远程计算机。 在远程Linux机器上运行命令。 打开输入框并响应输入值。 拨打蚂蚁电话。 答案&#xff1a; 1.制作zip文件&#xff1a; 以下是在ant中制作zip文件的xml…

poj-2955-Brackets-区间DP

poj-2955-Brackets-区间DP BracketsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 9014 Accepted: 4829Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regular brackets sequence,if s …

Python调用(运行)外部程序

在Python中可以方便地使用os模块运行其他的脚本或者程序&#xff0c;这样就可以在脚本中直接使用其他脚本&#xff0c;或者程序提供的功能&#xff0c;而不必再次编写实现该功能的代码。为了更好地控制运行的进程&#xff0c;可以使用win32process模块中的函数。如果想进一步控…

Java中已检查和未检查的异常

Java有两种类型的异常-已检查和未检查。 简而言之&#xff0c;选中的是指开发人员可以从异常中合理恢复的情况&#xff0c;而未选中的异常是无法处理的编程错误。 本文介绍了何时使用哪种。 但这不是那么简单–受检查的异常使代码变得“丑陋”。 它们迫使开发人员编写try / cat…

CCF - 201403-3 - 命令行选项

问题描述 试题编号&#xff1a;201403-3试题名称&#xff1a;命令行选项时间限制&#xff1a;1.0s内存限制&#xff1a;256.0MB问题描述&#xff1a; 问题描述请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空…

java 枚举 values_JAVA 枚举运用一 values方法

importjava.lang.reflect.Method;importjava.lang.reflect.Type;importjava.util.Set;import java.util.*;public classEnumJavaClass {public enumEnumClass{One("参数变量枚举一"),Two("参数变量枚举二"),Three("参数变量枚举三");privateStri…

telnet测试端口是否正常打开

点击计算机的开始菜单--》运行 &#xff0c;输入CMD命令&#xff0c;然后确定。打开cmd命令行。 输入telnet测试端口命令&#xff1a; telnet IP 端口 或者 telnet 域名 端口 回车 如果端口关闭或者无法连接&#xff0c;则显示不能打开到主机的链接&#xff0c;链接失败 端口…

Linux历史,安装,分区,版本

Linux 历史 1970年是 UNIX元年&#xff0c;这一年 Kenneth Lane Thompson 和 Dennis Ritchie 合作编写了UNIX系统。Stallman 发起了GNU 计划&#xff0c;他本人开发了Emacs, GCC, GDB.Minix&#xff1a;教学用的类UNIX系统&#xff0c;由于UNIX是收费的且价格昂贵&#xff0c;因…

放弃Eclipse Juno

在上一个博客中&#xff0c;我发布了有关Eclipse 4.2 Juno设置的信息。 万一我需要重新安装其他东西&#xff0c;也可以作为参考。 当时我没有谈论的是我与Juno共同遇到的问题。 我以为这是我自己的安装程序&#xff0c;很麻烦&#xff0c;但是此后并没有太大改善。 我遇到的主…

Java instead of 用法_我又不是你的谁--java instanceof操作符用法揭秘

背景故事《曾经最美》是朱铭捷演唱的一首歌曲&#xff0c;由陈佳明填词&#xff0c;叶良俊谱曲&#xff0c;是电视剧《水晶之恋》的主题曲。歌曲时长4分28秒。 歌曲歌词&#xff1a;看不穿你的眼睛藏有多少悲和喜像冰雪细腻又如此透明仿佛片刻就要老去整个城市的孤寂不止一个你…

3.26

http://codeforces.com/gym/101196/attachments A题 B题 题意&#xff1a;一群人玩桌上足球(>4人)&#xff0c;分成黑白两队&#xff0c;每队有进攻和防守两名玩家&#xff0c;如果有一方失败则失败方的防守坐到等候席的结尾、进攻被流放到防守区再上来一个人作为进攻方。而…

scala akka通信机制

https://www.2cto.com/kf/201701/587514.html转载于:https://www.cnblogs.com/rocky-AGE-24/p/7542874.html

JUnit通过失败测试案例

为什么要建立一种预期测试失败的机制&#xff1f; 有一段时间&#xff0c;人们会希望并期望JUnit Test案例失败。 尽管这种情况很少见&#xff0c;但确实发生了。 我需要检测JUnit测试何时失败&#xff0c;然后&#xff08;如果期望的话&#xff09;通过而不是失败。 具体情况是…

CentOS6.5安装MySQL5.7详细教程

CentOS6.5安装MySQL5.7详细教程 注&#xff1a;文中所写的安装过程均在CentOS6.5 x86下通过测试 主要参考博文&#xff1a; https://segmentfault.com/a/1190000003049498 http://www.th7.cn/db/mysql/201601/175073.shtml 1.检测系统是否已经安装过mysql或其依赖&#xff0c;若…

cmake 查看编译命令,以及在vscode中如何使用cmke

通过设置如下配置选项&#xff0c;可以生成compile_commands.json 文件&#xff0c;记录使用的编译命令 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)获得现有模块列表 cmake --help-module-list查看命令文档 cmake --help-command find_file查看模块的详细信息 cmake --help-mo…