jsp中用自定义标签实现简单的分页
昨天学了一天的自定义标签,大概了解了其原理,就写了一个实现简单分页的程序。
1.它是基于我自己写的分页类(Pager)的,其代码如下:
package com.neusoft.training.database.oe;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
/**
* <p>Description: 获得一个page,用于分页。</p>
* @author <a href="mailto: chengtj@neusoft.com">程天俊</a>
* @version $Revision: 1.3 $
*/
public class Pager
{
/**
* <p>Discription:查询的总行数</p>
*/
private int totalRows;
/**
* <p>Discription:每页显示的记录数</p>
*/
private int pageSize = 10;
/**
* <p>Discription:现在所在的页数</p>
*/
private int currentPage;
/**
* <p>Discription:总页数</p>
*/
private int totalPages;
/**
* <p>Discription:本页的开始行</p>
*/
private int startRow;
/**
* <p>Discription:存放查询条件,一般是ActionForm类型的form</p>
*/
private ActionForm form;
/**
* <p>Discription:构造一个无参的pager对象</p>
* @coustructor 方法.
*/
public Pager()
{
this.currentPage = 1;
this.startRow = 0;
}
/**
* <p>Discription:根据request(pagesize和pagemethod)和totalrows设置pager对象的属性</p>
* @coustructor 方法.
*/
public void checkRequest(HttpServletRequest httpServletRequest)
{
String pageSizep = httpServletRequest.getParameter("pageSize");
if (pageSizep != null)
{
this.pageSize=Integer.parseInt(pageSizep);
}
this.totalPages = this.totalRows / this.pageSize;
int mod = this.totalRows % this.pageSize;
if (mod > 0)
{
this.totalPages++;
}
String currentPage = httpServletRequest.getParameter("currentPage");
if (currentPage != null)
{
this.refresh(Integer.parseInt(currentPage));
}
String pagerMethod = httpServletRequest.getParameter("pageMethod");
if (pagerMethod != null)
{
if (pagerMethod.equals("first"))
{
this.first();
}
else if (pagerMethod.equals("previous"))
{
this.previous();
}
else if (pagerMethod.equals("next"))
{
this.next();
}
else if (pagerMethod.equals("last"))
{
this.last();
}
}
}
/**
* <p>Discription:获得pager的开始行</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public int getStartRow()
{
return startRow;
}
/**
* <p>Discription:获得pager的总行数</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public int getTotalPages()
{
return totalPages;
}
/**
* <p>Discription:获得pager的当前页</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public int getCurrentPage()
{
return currentPage;
}
/**
* <p>Discription:获得pager的每页显示的记录数</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public int getPageSize()
{
return pageSize;
}
/**
* <p>Discription:设置pager的总记录数</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void setTotalRows(int totalRows)
{
this.totalRows = totalRows;
}
/**
* <p>Discription:设置pager的开始行</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void setStartRow(int startRow)
{
this.startRow = startRow;
}
/**
* <p>Discription:设置pager的总页数</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void setTotalPages(int totalPages)
{
this.totalPages = totalPages;
}
/**
* <p>Discription:设置pager的当前页</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void setCurrentPage(int currentPage)
{
this.currentPage = currentPage;
}
/**
* <p>Discription:设置pager的每页显示的记录数</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void setPageSize(int pageSize)
{
this.pageSize = pageSize;
}
/**
* <p>Discription:设置pager的总记录数</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public int getTotalRows()
{
return totalRows;
}
/**
* <p>Discription:设置pager的首页执行的操作</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void first()
{
currentPage = 1;
startRow = 0;
}
/**
* <p>Discription:设置pager的上一页执行的操作</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void previous()
{
if (currentPage == 1)
{
return;
}
currentPage--;
startRow = (currentPage - 1) * pageSize;
}
/**
* <p>Discription:设置pager的下一页执行的操作</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void next()
{
if (currentPage < totalPages)
{
currentPage++;
}
startRow = (currentPage - 1) * pageSize;
}
/**
* <p>Discription:设置pager的末页执行的操作</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void last()
{
currentPage = totalPages;
startRow = (currentPage - 1) * pageSize;
}
/**
* <p>Discription:刷新pager的当前页</p>
* @return
* @author:程天俊
* @update:[日期YYYY-MM-DD] [更改人姓名][变更描述]
*/
public void refresh(int _currentPage)
{
currentPage = _currentPage;
if (currentPage > totalPages)
{
last();
}
}
public ActionForm getForm()
{
return form;
}
public void setForm(ActionForm form)
{
this.form = form;
}
}
2.获得一个pager的方法,其用法用下:
public Pager getComPager(HttpServletRequest request,
CommodityTypeForm commodityTypeForm) throws SQLException,
IllegalAccessException, InvocationTargetException
{
Connection conn = DBPool.getPool().getConnection();
CommodityTypeDao commodityTypeDao = new CommodityTypeDao();
commodityTypeDao.setConn(conn);
CommodityType commodityType = new CommodityType();
BeanUtils.copyProperties(commodityType, commodityTypeForm);
int totalRows = commodityTypeDao.getRows(commodityType);
//创建一个Pager对象,并设置其属性
Pager pager = new Pager();
pager.setForm(commodityTypeForm);
pager.setTotalRows(totalRows);
pager.checkRequest(request);
if (conn != null)
{
conn.close();
}
return pager;
}
3.根据获得的Pager对象去查询记录(主要是在action中用其查询条件form,pagesize和startrow):
if (comTypeId == null)
//如果request中没有form对象来判断是不是分页查询,是就从session中取出Pager对象
{
commodityPager = (Pager) request.getSession().getAttribute(
"commodityPager");
commodityPager.checkRequest(request);
request.getSession().setAttribute("commodityPager", commodityPager);
}
else//否则就把用管理类中的方法重新获得一个Pager对象
{
commodityPager = commodityTypeManager.getComPager1(request,
commodityTypeForm);
request.getSession().setAttribute("commodityPager", commodityPager);
}
//根据获得的Pager对象,查询出要显示的记录(list)
commodityResultList = commodityTypeManager.getComTypeListPage(
(CommodityTypeForm) (commodityPager.getForm()), commodityPager.getPageSize(),
commodityPager.getStartRow());
//页面要用的信息
request.setAttribute("PAGER", commodityPager);
request.setAttribute("commodityresultlist", commodityResultList);
4.开始写自定义标签,其主要是显示上一页,下一页等操作,而要输出的list是在页面上用<logic:iteator>l输出到页面的,书写自定义标签的步骤如下:
(1)创建标签处理类(ChengPage):
package com.neusoft.training.common;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import com.neusoft.training.database.oe.Pager;
import java.io.*;
public class ChengPage extends TagSupport
{
/**
* <p>Discription:[字段功能描述]</p>
*/
private static final long serialVersionUID = 1L;
String url;
Pager pager;
//自定义标签的两个属性
public String getUrl()
{
return url;
}
public void setUrl(String url)
{
this.url = url;
}
public Pager getPager()
{
return pager;
}
public void setPager(Pager pager)
{
this.pager = pager;
}
public int doStartTag() throws JspException
{
try
{
String pageString = "";
if (this.getPager() != null)
{
if (pager.getCurrentPage() != 1)
{
pageString += "<a href=/""
+ url
+ ".do?method=doQuery&pageMethod=first"
+ "/"><img src=/"../images/fir.bmp/" alt=/"首页/"></a>";
//.do?method=doQuery&pageMethod=first等要根据自己的路径填写
//带<img>的等要根据自己的路径填写
pageString += "<a href=/""
+ url
+ ".do?method=doQuery&pageMethod=previous"
+ "/"><img src=/"../images/pre.bmp/" alt=/"上一页/"></a>";
if (pager.getCurrentPage() == pager.getTotalPages())
{
pageString += "<img src=/"../images/next2.bmp/" alt=/"下一页/">";
pageString += "<img src=/"../images/last2.bmp/" alt=/"尾页/">";
}
else
{
pageString += "<a href=/""
+ url
+ ".do?method=doQuery&pageMethod=next"
+ "/"><img src=/"../images/next.bmp/" alt=/"下一页/"></a>";
pageString += "<a href=/""
+ url
+ ".do?method=doQuery&pageMethod=last"
+ "/"><img src=/"../images/last.bmp/" alt=/"尾页/"></a>";
}
}
else
{
pageString += "<img src=/"../images/fir2.bmp/" alt=/"首页/">";
pageString += "<img src=/"../images/pre2.bmp/" alt=/"上一页/">";
if (pager.getCurrentPage() == pager.getTotalPages())
{
pageString += "<img src=/"../images/next2.bmp/" alt=/"下一页/">";
pageString += "<img src=/"../images/last2.bmp/" alt=/"尾页/">";
}
else
{
pageString += "<a href=/""
+ url
+ ".do?method=doQuery&pageMethod=next"
+ "/"><img src=/"../images/next.bmp/" alt=/"下一页/"></a>";
pageString += "<a href=/""
+ url
+ ".do?method=doQuery&pageMethod=last"
+ "/"><img src=/"../images/last.bmp/" alt=/"尾页/"></a>";
}
}
pageString += "<img src=/"../images/go.png/" alt=/"goto/""
+ "οnclick=/"gotopage('pagenum','"
+ url
+ "')/">"
+ "<input type=/"text/" name=/"pagenum/" id=/"pagenum/""
+ "style=/"width: 20px/" value=/""
+ pager.getCurrentPage() + "/" />/"
+ pager.getTotalPages() + "页 ";
pageString += "共" + pager.getTotalRows() + "条记录 ";
pageString += "当前显示第" + (pager.getStartRow() + 1) + "条到";
if ((pager.getStartRow() + 10) <= pager.getTotalRows())
{
pageString += pager.getStartRow() + 10;
}
else
{
pageString += pager.getTotalRows();
}
pageString += "条记录";
}
pageContext.getOut().write(pageString);
}
catch (IOException e)
{
System.out.println("Page Tag Error :" + e);
}
return super.doStartTag();
}
}
(2)配置自定义标签,先在WEB-INF下建一个ctj-page.tld,其内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib 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"
version="2.0">
<description>My Taglib by JavaWorld.com.tw</description>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>PageTest</short-name>
<uri></uri>
<small-icon></small-icon>
<tag>
<description>Example:Hello</description>
<name>page</name>
<tag-class>com.neusoft.training.common.ChengPage</tag-class>
<body-content>empty</body-content>
<attribute>
<name>url</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pager</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
(3)在页面上引用自定义标签:
<%@ taglib uri="/WEB-INF/ctj-page.tld" prefix="ctj" %>
<logic:iterate id="equchange" name="changeresultlist">
//这里输出查询到的记录
</logic:iterate>
//显示上一页、下一页等
<ctj:page url="/OASystem1/equipmentchange" pager="${PAGER}"/>
(4)效果如下:
①初始页面如下:
②点击“查询”按钮后的页面如下:
③点击“下一页”后的页面:
jsp中用自定义标签实现简单的分页相关推荐
- jsp tag 自定义标签实现按钮的显示
前些天在一个项目中做了一个最基本的权限管理(标准的权限结构,用户-角色-菜单),后来需要精确地控制到按钮就想到了使用自定义标签(jsp tag)来处理按钮的显示与隐藏. 下面是我参考网上的资料自己写的 ...
- java程序设计颜志军_JSP 自定义标签之一 简单实例
在JSP中使用自定义标签可以达到这样的目的,事实上,我们所熟知的各类框架基本上都是通过自定义标签的形式来实现的. 通过使用自定义标签,我们可以将实现复杂的逻辑在页面用简单的标签来加以展示.下面我们来实 ...
- JSP自定义标签之简单标签入门
在sun官方文档上有下面这样一段话. 官方文档声明 public interface SimpleTag extends JspTag Interface for defining Simple Ta ...
- java自定义标签简单_JSP 自定义标签之一 简单实例
在jsp中使用自定义标签可以达到这样的目的,事实上,我们所熟知的各类框架基本上都是通过自定义标签的形式来实现的. 通过使用自定义标签,我们可以将实现复杂的逻辑在页面用简单的标签来加以展示.下面我们来实 ...
- 如何在JSP里自定义标签
自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web containe ...
- jsp 如何自定义标签
数据库里存储的是long型的时间,现在想输出到jsp页面,由于使用的是jstl标签,而要显示的是可读的时间类型,找来找去有个fmt:formatDate可以转化,但是只能转date型,long型则不可 ...
- jsp使用自定义标签taglib分页系列——SearchForm - cao_david的专栏 - CSDNBlog
导读: package com.adroit.nidus.taglib.html; import org.apache.struts.validator.ValidatorForm; /** * Ti ...
- jsp中用java写标签id_jsp中自定义标签用法实例分析
本文实例讲述了jsp中自定义标签用法.分享给大家供大家参考.具体如下: 这里简单的写了一个自定义标签,自己定义标签的好处就是在jsp页面中可以使用自己定义的功能,完全与Java代码分离 1. tld文 ...
- JSP自定义标签开发与打包
前言:最近用到JSP的自定义标签,于是到网上寻找资料,结果发现很多的网上教程要么不全要么就是步骤流程错误,尤其是将自定义标签打jar包这一过程,按照网上的教程操作,结果被坑惨了,所以才有现在这一篇博文 ...
最新文章
- android 拍照空指针,空指针异常时嵌入照片中的Android
- 【留用】C#的一些好的书籍
- 梁戈碧:促数据中心转型 释放数据洞察力
- [转]easyui datagrid 批量编辑和提交
- VS2005 解决应用程序配置不正确,程序无法启动问题
- 【Redis学习】Transaction事务管理
- oracle确实表达式,ORACLE正规表达式
- 发布:偶写的NHibernate代码生成器
- CVPR 2021 3D视觉相关最新进展分享
- 微服务——最热门的架构
- 吴恩达机器学习 12.异常检测
- 局域网ip扫描工具_Network Kit X for Mac(网络检测工具箱)
- python风控建模_风控建模之特征筛选与建模(python)
- 微信小程序开源框架wxSortPickerView:微信小程序首字母排序选择表
- 单片机中断程序详解(转)
- 感觉现在的技术圈越来越像娱乐圈了
- 小程序设置appId
- 苹果端手机微信页面长按图片无法保存的解决方案
- 二极管选型-二极管参数介绍
- 局域网唤醒计算机,电脑远程开机_局域网唤醒电脑 | 茶杯猫