|
002 |
003 |
import
java.io.IOException; |
004 |
005 |
import
javax.servlet.http.HttpServletRequest; |
006 |
import
javax.servlet.jsp.JspException; |
007 |
import
javax.servlet.jsp.JspWriter; |
008 |
import
javax.servlet.jsp.tagext.TagSupport; |
009 |
010 |
public
class PageTag extends
TagSupport { |
011 |
012 |
private
String url; |
013 |
014 |
public
String getUrl() { |
015 |
return
url; |
016 |
} |
017 |
018 |
public
void setUrl(String url) { |
019 |
this .url = url; |
020 |
} |
021 |
022 |
@Override |
023 |
public
int doEndTag()
throws JspException { |
024 |
025 |
return
this .EVAL_PAGE; |
026 |
} |
027 |
028 |
@Override |
029 |
public
int doStartTag()
throws JspException { |
030 |
// 獲得當前頁面對應的Request對象 |
031 |
HttpServletRequest request = (HttpServletRequest) pageContext |
032 |
.getRequest(); |
033 |
// 獲得當前保存Request對象中pageBean |
034 |
Pager pager = (Pager) request.getAttribute( "pager" ); |
035 |
// out--->JspWriter |
036 |
JspWriter out = pageContext.getOut(); |
037 |
StringBuilder s =
new StringBuilder(); |
038 |
|
039 |
|
040 |
s.append( "共" +((pager.getSize()- 1 )/pager.getLength()+ 1 )+ "頁
" ); |
041 |
|
042 |
|
043 |
|
044 |
if
(pager.getSize() >pager.getLength()) { |
045 |
String pref;
// 前綴 |
046 |
if
(url.indexOf( "?" ) > - 1 ) { |
047 |
// 如果url中已經包含了其他的參數,就把offset參數接在後面 |
048 |
pref =
"&" ; |
049 |
}
else { |
050 |
// 如果url中沒有別的參數 |
051 |
pref =
"?" ; |
052 |
} |
053 |
// 如果導航條包含header |
054 |
if
(pager.getPageHeader() != null
&& pager.getPageHeader().length() > 0 ) { |
055 |
|
056 |
} |
057 |
// 如果不是第一頁,導航條將包含“<<”(第一頁)和“<”(前一頁) |
058 |
if
(pager.getOffset() > 0 ) { |
059 |
|
060 |
s.append(
"<a href='" + url + pref |
061 |
+
"current=0'>[首頁]</a>\n"
+ "<a href='" + url + pref |
062 |
+
"current=" + (pager.getOffset() - pager.getLength()) +
"'>[<]</a>\n" ); |
063 |
} |
064 |
// 導航條中,排頭的那一頁的current值 |
065 |
int
startOffset; |
066 |
// 位於導航條中間的那一頁的current值(索引值) |
067 |
int
radius = Constants.MAX_PAGE_INDEX / 2
* pager.getLength(); |
068 |
// 如果當前的current值小於索引值 |
069 |
if
(pager.getOffset() < radius |
070 |
|| pager.pageCount() <= Constants.MAX_PAGE_INDEX) { |
071 |
// 那麼第一頁排頭 |
072 |
startOffset =
0 ; |
073 |
}
else if
(pager.getOffset() < pager.getSize() - radius) { |
074 |
startOffset = pager.getOffset() - radius; |
075 |
}
else { |
076 |
startOffset = (pager.getSize() / pager.getLength() - Constants.MAX_PAGE_INDEX) |
077 |
* pager.getLength(); |
078 |
} |
079 |
for
( int
i = startOffset; i < pager.getSize() |
080 |
&& i < startOffset + Constants.MAX_PAGE_INDEX * pager.getLength(); i += pager.getLength()) { |
081 |
if
(i == pager.getOffset()) { |
082 |
// 當前頁號,加粗顯示 |
083 |
s.append(
"<b>" + (i / pager.getLength() +
1 ) + "</b>\n" ); |
084 |
}
else { |
085 |
// 其他頁號,包含超鏈接 |
086 |
s.append(
"<a href='" + url + pref +
"current=" + i |
087 |
+
"'>" + (i / pager.getLength() +
1 ) + "</a>\n" ); |
088 |
} |
089 |
} |
090 |
// 如果不是最後一頁,導航條將包含“>”(下一頁)和“>>”(最後一頁) |
091 |
if
(pager.getOffset() < pager.getSize() - pager.getLength()) { |
092 |
s.append(
"<a href='" + url + pref +
"current=" |
093 |
+ (pager.getOffset() + pager.getLength()) +
"'>[>]</a>\n" +
"<a href='" |
094 |
+ url + pref +
"current=" + pager.lastPageOffset() |
095 |
+
"'>[尾頁]</a>\n" ); |
096 |
} |
097 |
|
098 |
} |
099 |
// 記錄不超過一頁,不需要分頁 |
100 |
else
{ |
101 |
s.append( " " ); |
102 |
} |
103 |
s.append( " " +pager.getSize()+ "條記錄" ); |
104 |
try
{ |
105 |
|
106 |
out.println(s.toString()); |
107 |
|
108 |
}
catch (IOException e) { |
109 |
// TODO Auto-generated catch block |
110 |
e.printStackTrace(); |
111 |
} |
112 |
|
113 |
|
114 |
return
this .SKIP_BODY; |
115 |
} |
116 |
117 |
tld
|