(struts1 和struts2 均适用,不依赖任何框架)
一.创建dream.tld 放在WEB-INF 下
<?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>A tag library exercising SimpleTag handlers.</description>
<tlib-version>1.0</tlib-version>
<short-name>dream</short-name>
<uri>/dream</uri>
<description>version 1.0</description>
<tag>
<name>page</name>
<tag-class>com.taglib.PageTag
</tag-class>
<body-content>empty</body-content>
<attribute>
<!--标签中的属性-->
<name>name</name>
<!--属性名-->
<required>true</required>
<!--是否必须-->
<rtexprvalue>true</rtexprvalue>
<!--表示该自定义标签的某属性的值可以直接指定或者通过动态计算指定-->
</attribute>
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>styleClass</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
二.创建Page.java(有点乱)
public class Page {
/** 当前页 */
private int pageNo;
/** 每页数据量 */
private int pageSize;
/** 总数据量 */
private int allCount;
/** 总页数 */
private int allPage;
/** 每页开始 */
private int recordStart;
/** 每页结束 */
private int recordEnd;
/** 是否有上一页 */
private boolean hasPrePage;
/** 是否有下一页 */
private boolean hasNextPage;
/** 显示页数 */
private int showCount;
/** 显示开始 */
private int showStart;
/** 显示结束 */
private int showEnd;
// set get方法略
public Page() {
pageNo = 1;
pageSize = 0;
allPage = 1;
recordStart = 0;
recordEnd = 0;
hasPrePage = false;
hasNextPage = false;
try {
excecute();
} catch (Exception exception) {
}
}
public Page(int pageNo, int allCount) {
this.pageNo = pageNo;
this.pageSize = 25;
this.allCount = allCount;
this.allPage = 1;
this.recordStart = 0;
this.recordEnd = 0;
hasPrePage = false;
hasNextPage = false;
try {
excecute();
} catch (Exception exception) {
}
}
public Page(int pageNo, int pageSize, int allCount) {
this.pageNo = pageNo;
this.pageSize = pageSize;
this.allCount = allCount;
this.allPage = 1;
this.recordStart = 0;
this.recordEnd = 0;
hasPrePage = false;
hasNextPage = false;
try {
excecute();
} catch (Exception exception) {
}
}
public void excecute() {
if (pageNo <= 0) {
pageNo = 1;
}
recordStart = (pageNo - 1) * pageSize + 1;
recordEnd = Math.min(recordStart + pageSize, allCount);
if (allCount % pageSize == 0) {
allPage = allCount / pageSize;
} else {
allPage = allCount / pageSize + 1;
}
if (pageNo > 1) {
hasPrePage = true;
}
if (pageNo < allPage) {
hasNextPage = true;
}
if (showCount <= 0) {
showCount = 9;
}
//设定显示N页,我设定为9个;看效果图
showCount = Math.min(showCount, allPage);
if (showCount < 9) {
showStart = 1;
showEnd = showCount + showStart;
} else {
if (pageNo - 3 <= 1) {
showStart = 1;
} else {
showStart = pageNo - 3;
}
if (allPage - 3 < pageNo) {
showEnd = allPage - 3;
} else {
if (showStart == 1) {
showEnd = showStart + 6;
} else {
showEnd = pageNo + 3;
}
}
}
}
}
三.创建PageTag.java(没有具体研究,返回值,先用0代替吧)
public class PageTag extends BodyTagSupport {
private String name;
private String url;
private String styleClass;
// set get方法略
public int doEndTag() throws JspException {
try {
HttpServletRequest request = (HttpServletRequest) super.pageContext.getRequest();
Object obj = request.getAttribute("pageInfo");
if (obj == null) {
return 0;
}
if (!(obj instanceof Page)) {
return 0;
}
Page page = (Page) obj;
StringBuffer sb = new StringBuffer();
//可根据page的get方法设定内容,我的如下:
sb.append("<input type='button' value='首页'" + getReadOnly(page.isHasPrePage()) + "/> ");
sb.append("<input type='button' value='上一页'" + getReadOnly(page.isHasPrePage()) + "/> ");
if (page.getShowStart() > 1) {
sb.append("... ");
}
for (int i = page.getShowStart(); i < page.getPageNo(); i++) {
sb.append("<a href='#'>" + i + "</a> ");
}
sb.append("<a href='#' class='" + styleClass + "'>" + page.getPageNo() + "</a> ");
for (int i = page.getPageNo() + 1; i <= page.getShowEnd(); i++) {
sb.append("<a href='#'>" + i + "</a> ");
}
if (page.getShowEnd() < page.getAllPage()) {
sb.append("... ");
}
sb.append("<input type='button' value='下一页'" + getReadOnly(page.isHasNextPage()) + "/> ");
sb.append("<input type='button' value='尾页'" + getReadOnly(page.isHasNextPage()) + "/>");
JspWriter jspwriter = super.pageContext.getOut();
jspwriter.write(sb.toString());
} catch (Exception exception) {
throw new JspException(exception);
}
return 0;
}
private String getReadOnly(boolean b) {
if (!b) {
return "class='disableButton'";
}
return "class='button'";
}
四.
public class XXAction extends MainAction {
/**页面的数据结果*/
private List result;
private Page pageInfo;
private String url;
/** 当前页*/
private int page;
//get Set略
//其他略
protected String execute() throws Exception {
List data = new ArrayList();
for (int i = 0; i < 1000; i++) {
//自行定地XXEntity ,就是一个javaBean,测试用
XXEntity entity = new XXEntity ();
entity.setID(i % 2);
....
data.add(entity);
}
//必须有这几步
pageInfo = new Page(page, data.size());
pageInfo.excecute();
result = data.subList(pageInfo.getRecordStart() - 1, pageInfo.getRecordEnd() - 1);
url="...";
return SUCCESS;
}
}
五.jsp
<%@ page contentType="text/html;charset=utf-8"%>
<%@ taglib uri="/WEB-INF/dream.tld" prefix="dream"%>
...
<dream:page name="pageInfo" url="url" styleClass="currentA" />
...
六.效果图
七,css,可能不完备,需要body式样等支持, 式样可根据个人喜好了
.button {
background-color:#F3FAFF;
border: 1px solid #7F9DB9;
padding-right: 7px;
padding-left: 7px;
padding-top: 1px;
cursor:pointer;
color:#005BAC;
}
.button:hover{
padding-right: 7px;
padding-left: 7px;
padding-top: 1px;
background-color:#005BAC;
color:#F3FAFF;
}
.disableButton{
background-color:#F3FAFF;
border: 1px solid #7F9DB9;
padding-right: 7px;
padding-left: 7px;
padding-top: 1px;
color:#005BAC;
}
a {
color: #005EAC
}
a:link {
color: #005EAC;
text-decoration: none
}
a:visited{
text-decoration: none
}
a:hover {
color: #C00;
text-decoration: underline
}
....
- 大小: 5.8 KB
分享到:
相关推荐
JSP自定义标签分页+Struts1.x标签,包含标签分页类、标签tld文件、web.xml配置和调用例子,非常地简单。 只要在Action传request.setAttribute("listUser", listUser);到JSP即可实现自动分页,输出分页样式可以自己去...
自已写的一个jsp自定义分页器zoo-paging-1.0.jar,附带有源码以及例子,希望对大家有用!
这里在实现自定义标签时,继承的2个类分别是org.apache.struts2.views.jsp.ComponentTagSupport和org.apache.struts2.components.Component,ComponentTagSupport实际上是对BodyTagSupport的一次封装,看一下...
自定义标签实现分页,分页信息都封装在一个继承自TagSupport的java文件中,自定义一个tld文件,jsp页面通过taglib指令引入tld文件,使用自定义标签。
一个分页标签,只需使用一个标签就可以输出分页信息。配有示例,示例中使用了Struts 1.x + Hibernate, 不用这两个框架的话稍微做些修改就可以了,比较简单,就不啰嗦了,基本使用方法都差不多,有错误指出欢迎指正。
自定义分页标签,可分页显示保存在List中的任意对象
下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...
简单易懂的struts2实现jsp现实分页技术。
用struts 框架所做。分页显示。查询。插入。等。
jsp使用自定义标签taglib分页系列——完整例子(其中struts控件和包我没有加入,需要自己加入)
struts分页标签struts分页标签struts分页标签struts分页标签
本人用struts+hibernate写的分页,有详细的注解,方便新手学习,在jsp中实现首页下一页上一页末页功能.index.jsp控制showlist.jsp页面中每页显示的信息条数,本实例在xp+tomcat5.5验证通过.数据库使用的sql2000中的pubs...
使用JSP、Struts2和jquery实现简单查询,分页,导出到Excel并保存到本地计算机。(数据库相关内容在webroot下db文件夹内)
Struts2 + Spring2 + Hibernate3经典分页(包含java及jsp源码) Struts2 + Spring2 + Hibernate3经典分页(包含java及jsp源码) Struts2 + Spring2 + Hibernate3经典分页(包含java及jsp源码)
使用jsp+struts2实现前台分页技术
JSP JDBC WEB STRUTS 分页综合实例1
NULL 博文链接:https://lpm528.iteye.com/blog/1327659
DisplayTag是个很好的jsp标签,目前最新版本为1.2,支持了自定义分页,解决了之前版本每次查询都把全部数据查出的低效率做法。但是DisplayTag默认是通过url传参,以及分页导航不灵活给人们带来了不少麻烦。鉴于此...
JAVA分页大全.doc Hibernate分页查询.doc hibernate实现分页技术.txt struts实现分页技术源代码txt Struts+hibernate制作分页的问题txt spring+struts+hibernate 分页问题.txt ...jsp实现分页技术.txt
JSP JDBC WEB STRUTS 分页综合实例2