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