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.pswp.cn/news/371204.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371204.shtml
英文地址,請注明出處:http://en.pswp.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…