jsp定制分页标签
来源:互联网 发布:mac os系统好用吗 编辑:程序博客网 时间:2024/06/11 14:31
在项目开发过程中需要展示报表,然而一般报表的内容都比较长,需要做分页处理,手动写的分页倒也可以,但是不能每个页面都写一套逻辑,即便是用<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() */@Overridepublic 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控制过的了。
0 0
- jsp定制分页标签
- jsp 定制标签
- JSP定制标签库
- JSP 定制标签
- JSP编写定制标签
- jsp 自定义分页标签
- jsp分页标签
- JSP分页标签
- jsp自定义分页标签
- JSP标签分页实现
- jsp自定义分页标签
- jsp分页标签
- jsp 自定义分页标签
- jsp分页标签
- JSP自定义分页标签
- 自定义Jsp分页标签
- jsp自定义分页标签
- jsp自定义分页标签
- SolrCloud 分布式集群安装部署以及管理
- standford iOS7 公开课笔记目录树
- 若腾网络大站协议邮件群发软件不换ip不用小号
- 第一部分 基础篇 第三章 MongoDB体系结构
- kNN(K-Nearest Neighbor)最邻近规则分类
- jsp定制分页标签
- tar命令高级用法——备份数据
- UVA - 579 Clock Hands
- The Abstract Equality Comparison Algorithm
- Linux IPC机制:消息队列示例
- 读《C陷阱与缺陷》(一)
- The home of my deep neural network
- Too many open files
- ubuntu 14.10 chromium 如何安装flash插件