自定義分頁標籤詳解
最核心的自定義分頁標籤類的寫法PagerTag.java,前提是要繼承自TagSupport類
package com.javacrazyer.web.tag;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 分頁標籤處理類
*/
public class PagerTag extends TagSupport {
private static final long serialVersionUID = 5729832874890369508L;
private String url; //請求URI
private int pageSize = 10; //每頁要顯示的記錄數
private int pageNo = 1; //當前頁號
private int recordCount; //總記錄數
@SuppressWarnings("unchecked")
public int doStartTag() throws JspException {
int pageCount = (recordCount + pageSize - 1) / pageSize; //計算總頁數
//拼寫要輸出到頁面的HTML文字
StringBuilder sb = new StringBuilder();
sb.append("<style type="text/css">");
sb.append(".pagination {padding: 5px;float:right;font-size:12px;}");
sb.append(".pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;border:1px solid #aaaadd;text-decoration:none;color:#006699;}");
sb.append(".pagination a:hover, .pagination a:active {border: 1px solid #ff0000;color: #000;text-decoration: none;}");
sb.append(".pagination span.current {padding: 2px 5px;margin: 2px;border: 1px solid #ff0000;font-weight: bold;background-color: #ff0000;color: #FFF;}");
sb.append(".pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}");
sb.append("</style>
");
sb.append("<div class="pagination">
");
if(recordCount == 0){
sb.append("<strong>沒有可顯示的專案</strong>
");
}else{
//頁號越界處理
if(pageNo > pageCount){ pageNo = pageCount; }
if(pageNo < 1){ pageNo = 1; }
sb.append("<form method="post" action="").append(this.url)
.append("" name="qPagerForm">
");
//獲取請求中的所有引數
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
Enumeration<String> enumeration = request.getParameterNames();
String name = null; //引數名
String value = null; //引數值
//把請求中的所有引數當作隱藏表單域
while (enumeration.hasMoreElements()) {
name = enumeration.nextElement();
value = request.getParameter(name);
// 去除頁號
if (name.equals("pageNo")) {
if (null != value && !"".equals(value)) {
pageNo = Integer.parseInt(value);
}
continue;
}
sb.append("<input type="hidden" name="")
.append(name)
.append("" value="")
.append(value)
.append(""/>
");
}
// 把當前頁號設定成請求引數
sb.append("<input type="hidden" name="").append("pageNo")
.append("" value="").append(pageNo).append(""/>
");
// 輸出統計資料
sb.append(" 共<strong>").append(recordCount)
.append("</strong>項")
.append(",<strong>")
.append(pageCount)
.append("</strong>頁:
");
//上一頁處理
if (pageNo == 1) {
sb.append("<span class="disabled">« 上一頁")
.append("</span>
");
} else {
sb.append("<a href="javascript:turnOverPage(")
.append((pageNo - 1))
.append(")">« 上一頁</a>
");
}
//如果前面頁數過多,顯示"..."
int start = 1;
if(this.pageNo > 4){
start = this.pageNo - 1;
sb.append("<a href="javascript:turnOverPage(1)">1</a>
");
sb.append("<a href="javascript:turnOverPage(2)">2</a>
");
sb.append("…
");
}
//顯示當前頁附近的頁
int end = this.pageNo + 1;
if(end > pageCount){
end = pageCount;
}
for(int i = start; i <= end; i++){
if(pageNo == i){ //當前頁號不需要超連結
sb.append("<span class="current">")
.append(i)
.append("</span>
");
}else{
sb.append("<a href="javascript:turnOverPage(")
.append(i)
.append(")">")
.append(i)
.append("</a>
");
}
}
//如果後面頁數過多,顯示"..."
if(end < pageCount - 2){
sb.append("…
");
}
if(end < pageCount - 1){
sb.append("<a href="javascript:turnOverPage(")
.append(pageCount - 1)
.append(")">")
.append(pageCount - 1)
.append("</a>
");
}
if(end < pageCount){
sb.append("<a href="javascript:turnOverPage(")
.append(pageCount)
.append(")">")
.append(pageCount)
.append("</a>
");
}
//下一頁處理
if (pageNo == pageCount) {
sb.append("<span class="disabled">下一頁 »")
.append("</span>
");
} else {
sb.append("<a href="javascript:turnOverPage(")
.append((pageNo + 1))
.append(")">下一頁 »</a>
");
}
sb.append("</form>
");
// 生成提交表單的JS
sb.append("<script language="javascript">
");
sb.append(" function turnOverPage(no){
");
sb.append(" if(no>").append(pageCount).append("){");
sb.append(" no=").append(pageCount).append(";}
");
sb.append(" if(no<1){no=1;}
");
sb.append(" document.qPagerForm.pageNo.value=no;
");
sb.append(" document.qPagerForm.submit();
");
sb.append(" }
");
sb.append("</script>
");
}
sb.append("</div>
");
//把生成的HTML輸出到響應中
try {
pageContext.getOut().println(sb.toString());
} catch (IOException e) {
throw new JspException(e);
}
return SKIP_BODY; //本標籤主體為空,所以直接跳過主體
}
public void setUrl(String url) {
this.url = url;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
}
WEB-INF/pager.tld的寫法
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
<tlib-version>0.9</tlib-version>
<!--標籤頭-->
<short-name>w</short-name>
<!--將來在頁面用taglib引用時的uri屬性,這部分的名字可以隨便寫,只要是符合HTTP網址形式的 -->
<uri>http://javacrazyer.iteye.com/tags/pager</uri>
<!-- 自定義標籤的描述資訊 -->
<tag>
<!-- 標籤名 -->
<name>pager</name>
<!-- 對應的標籤處理類全限定名 -->
<tag-class>com.javacrazyer.web.tag.PagerTag</tag-class>
<!-- 標籤主體的型別 -->
<body-content>empty</body-content>
<!-- 當前頁號屬性的描述資訊 -->
<attribute>
<!-- 屬性名 -->
<name>pageNo</name>
<!-- 該屬性是否為必要的 -->
<required>true</required>
<!-- 屬性值是否可以在JSP執行時期動態產生 -->
<rtexprvalue>true</rtexprvalue>
<!-- 屬性的資料型別 -->
<type>int</type>
</attribute>
<!-- 總記錄數屬性的描述資訊 -->
<attribute>
<name>recordCount</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<!-- 總頁數屬性的描述資訊 -->
<attribute>
<name>pageSize</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<!-- 分頁標籤要跳轉的URI屬性的描述資訊 -->
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
好了,就上面的兩個基本要素就已經構成了完整的分頁標籤,下面就差在頁面的使用方式了
一般的使用步驟為在JSP頁面中:
先倒入標籤庫:<%@taglib uri=”http://javacrazyer.iteye.com/tags/pager”
prefix=”w”%>
然後使用: <w:pager pageSize=”${pageSize}” pageNo=”${pageNo}” url=”do.jsp” recordCount=”${pm.recordCount}”/>
相關文章
- Struts2+Hibernate+Spring分頁自定義標籤Spring
- 自定義標籤【迭代標籤】薦
- 自定義標籤FlowTagLayout
- ThinkPHP自定義標籤PHP
- java自定義標籤Java
- JSP自定義標籤開發+TLD檔案元素詳解JS
- spring 自定義標籤Spring
- 建立自定義標籤庫
- jQuery Mobile 自定義標籤jQuery
- ViewPager之標籤的自定義Viewpager
- 關於自定義標籤庫
- 有關自定義標籤庫
- 自定義分頁格式
- 深入淺出自定義標籤(三)操作標籤體薦
- JavaScript物件導向修改標籤頁詳解JavaScript物件
- 08.Django自定義模板,自定義標籤和自定義過濾器Django過濾器
- JSP 自定義標籤介紹JS
- 【14】vue.js — 自定義標籤Vue.js
- spring2自定義標籤Spring
- 自定義標籤出現問題
- JSP自定義標籤之三:為標籤新增屬性JS
- HTML表單標籤詳解:如何用HTML標籤打造互動網頁?HTML網頁
- Html網頁中meta標籤及用法詳解HTML網頁
- 網頁裡引用mui的日曆,城市,自定義選擇標籤網頁UI
- jQuery自定義標籤程式碼例項jQuery
- input 標籤詳解
- img標籤詳解
- ANT標籤詳解
- HTML標籤詳解HTML
- JSP第六篇【自定義標籤之傳統標籤】JS
- django 自定義分頁與bootstrap分頁結合Djangoboot
- jsp定製分頁標籤JS
- 自定義分頁控制元件控制元件
- GridView 自定義模版自定義修改,刪除,分頁View
- Eclipse預設標籤TODO,XXX,FIXME和自定義標籤Eclipse
- [外掛擴充套件]onethink自定義分類標籤-關聯模型套件模型
- JSP自定義標籤就是如此簡單JS
- 擴充spring元件之自定義標籤Spring元件