jsp定製分頁標籤
在專案開發過程中需要展示報表,然而一般報表的內容都比較長,需要做分頁處理,手動寫的分頁倒也可以,但是不能每個頁面都寫一套邏輯,即便是用<jsp:include 感覺也是很煩,變動的東西太多,所以索性定製一個分頁的tag 比較方便,下面就給大家講解一下分頁標籤的製作過程。
1.環境準備
製作jsp分頁標籤需要依賴jsp-api的jar,我使用的是jsp-api2.0.jar,當然如果是使用eclipse的動態工程,那麼這個jar也是存在於tomcat裡面的,注意釋出的時候不要衝突就好了
2.分頁bean
每個人所需要的分頁屬性不同,比如pageSize(每頁大小),pageNum (總頁數),totalRows(總記錄數),curPage(當前頁),items(List,存放列表資料)等,使用者可以依據自己的需要進行定製,下面是我的分頁Bean
import java.util.List;
public class PageBean {
/**
* @Fields serialVersionUID :
*/
private int pageSize; //每頁大小
private int totalRows; //總記錄數
private int pageNum; //總頁數
private int curPage; //當前頁碼
private List items; //存放資料
public PageBean(int pageSize, int totalRows,
int curPage, List items) {
super();
this.pageSize = pageSize;
this.totalRows = totalRows;
this.pageNum = (int) Math.ceil((double)totalRows / pageSize);
this.curPage = curPage;
this.items = items;
}
/**
* @return pageSize
*/
public int getPageSize() {
return pageSize;
}
/**
* @param pageSize the pageSize to set
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* @return totalRows
*/
public int getTotalRows() {
return totalRows;
}
/**
* @param totalRows the totalRows to set
*/
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
/**
* @return pageNum
*/
public int getPageNum() {
return pageNum;
}
/**
* @param pageNum the pageNum to set
*/
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
/**
* @return curPage
*/
public int getCurPage() {
return curPage;
}
/**
* @param curPage the curPage to set
*/
public void setCurPage(int curPage) {
this.curPage = curPage;
}
/**
* @return items
*/
public List getItems() {
return items;
}
/**
* @param items the items to set
*/
public void setItems(List items) {
this.items = items;
}
}
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.log4j.Logger;
public class PaginationTag extends TagSupport {
Logger logger = Logger.getLogger(PaginationTag.class);
/**
* @Fields serialVersionUID :
*/
private static final long serialVersionUID = 1L;
private String value = "pb"; //存放實體的名字
/* (非 Javadoc)
* <p>Title: doStartTag</p>
* <p>Description: </p>
* @return
* @throws JspException
* @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
JspWriter out = pageContext.getOut();
String jspPageStr = makePageStr();
try {
out.write(jspPageStr);
} catch (Exception e) {
logger.error(e.getMessage());
}
return SKIP_BODY;
}
private String makePageStr() {
// 獲取到存放在request中的資料實體
PageBean pageBean = (PageBean) pageContext.getRequest().getAttribute(value);
StringBuffer sb = new StringBuffer();
if (pageBean != null && pageBean.getItems() != null
&& pageBean.getItems().size() > 0) {
sb.append("<div class='dataTables_paginate paging_bootstrap' style='padding:10px 0;'><ul class='pagination'>");
//首頁 上一頁
if (pageBean.getCurPage() > 1) {
sb.append("<li><a href='?page=1'>首頁 </a></li>");
sb.append("<li><a href='?page=" + (pageBean.getCurPage()-1) + "'>上一頁</a></li>");
}
//迴圈顯示中間頁碼,這裡也可控制最大隻顯示多少頁碼
for (int i = 1; i < pageBean.getPageNum() + 1; i++) {
if (i == pageBean.getCurPage()) {
sb.append("<li class='active'><a href='#'>" + i + "</a></li>");
} else if (Math.abs(pageBean.getCurPage() - i )< 5) {
sb.append("<li><a href='?page=" + i + "'> " + i + " </a></li>");
}
}
//下一頁 末頁
if(pageBean.getCurPage() != pageBean.getPageNum()){
sb.append("<li><a href='?page=" + (pageBean.getCurPage() + 1) + "'>下一頁 </a></li>");
sb.append("<li><a href='?page=" + pageBean.getPageNum() + "'>末頁</a></li>");
}
sb.append("<li><a href='#' style='border:none;'>共" + pageBean.getTotalRows() + "條記錄 ");
sb.append("第" + pageBean.getCurPage() + " / "
+ pageBean.getPageNum() + "頁</a></li>");
sb.append("</ul></div>");
}
return sb.toString();
}
/**
* @return value
*/
public String getValue() {
return value;
}
/**
* @param value the value to set
*/
public void setValue(String value) {
this.value = value;
}
}
4.這個分頁類寫好之後,基本上工作已經完成一大半了,剩下的工作是編寫jsp的tag檔案,供jsp來引入,struts的tag也是類似的定製方法,如下是我的tld檔案內容
page-tags.tld
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.0.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>page</shortname>
<uri>/page-tags</uri>
<tag>
<name>pager</name>
<tagclass>com.test.PaginationTag</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
這個xml檔案裡面我們主要關注的有3個地方,一個是taglib節點下的url屬性值,這個是jsp在引入這個標籤時方便找到對應的標籤檔案,不然知道是哪個嘛
另一個是tag 節點下的name屬性,這個就是在jsp引入的時候定義名稱空間後的內容,還有一個attribute屬性下的,name 這個就是表現內的屬性,屬性名為value,required指定為true為必須要有的屬性
這三步下來之後,我們的標籤就定義完了,可以在jsp檔案中使用它了,
在jsp檔案的頂部加上如下程式碼引入外部標籤
<%@ taglib prefix="tag" uri="/page-tags" %>
在jsp檔案中使用就比較方便了,直接加入如下程式碼,在你的頁面中
<tag:pager value="pb" />
這個value值為pb其實就是最上面定義的分頁實體PageBean.java 將裡面的值通過set方法或者構造方法填充就好了
附上我的分頁效果圖,當然是用css控制過的了。
相關文章
- JSP標籤庫介紹(1)定製標籤內幕 (轉)JS
- jsp 介面標籤頁 新增圖示JS
- [提問交流]請問列表頁呼叫article:page標籤如何實現分頁樣式定製.
- 用定製標籤庫和配置檔案實現對JSP頁面元素的訪問控制 (轉)JS
- 自定義分頁標籤詳解
- jsp標籤jsp:useBean用法JSBean
- JSP簡單標籤標籤庫開發JS
- (二)Chrome新標籤頁的設定Chrome
- NET Core-TagHelper實現分頁標籤
- jdon framework分頁標籤是否存有問題?Framework
- ssycms常用分類列表頁面的呼叫標籤
- JSP自定義標籤之三:為標籤新增屬性JS
- 用struts的標籤怎樣實現分頁?
- 如何在jsp頁面使用JSTL標籤和fn函式JS函式
- JSP 自定義標籤介紹JS
- Jsp中param標籤的使用JS
- 【原創】JSP標籤簡介JS
- 火狐瀏覽器如何設定主頁為新標籤頁瀏覽器
- JSP第六篇【自定義標籤之傳統標籤】JS
- JSP標籤庫介紹(1)什麼是標籤庫? (轉)JS
- 第 9 章 路徑分頁標籤和徽章元件元件
- 如何將Edge標籤頁設定得乾淨好用
- JSP C 標籤的常見用法JS
- html標籤分類HTML
- meta標籤設定
- Struts2+Hibernate+Spring分頁自定義標籤Spring
- 如何用jsp:setproperty標籤為自己寫的標籤類賦屬性JS
- 如何定製化Fiori標準應用裡UI欄位的標籤UI
- JSP自定義標籤就是如此簡單JS
- jsp如何自定義tag的標籤庫?JS
- FusionChartsFree的JSP標籤開發薦JS
- jsp中c標籤的詳細使用JS
- JSP自定義標籤系列---rtexprvalue屬性JS
- 易優arclist 文件列表(配合arcpagelist標籤可實現ajax瀑布流分頁)-Eyoucms標籤手冊
- macOS Monterey 12 新功能介紹 – Safari標籤頁分組功能Mac
- 標籤評分:海量標籤如何進行系統治理?
- elementplus中標籤頁操作
- SAP WebClient UI頁面標籤的決定邏輯介紹WebclientUI