自己做的分页标签

java__king 2008-10-03 09:44:41
自己做的,请高手指点指点
先是分页类代码:
public class FenYe extends TagSupport {

// 标签属性
private String driver;

private String url;

private String user;

private String pass;

private String sql;

private String[] names; // 要显示的表头

private int pageSize; // 一页显示的记录数

int RowCount; // 记录总数

int PageCount; // 总页数

int Page; // 待显示页码

// 执行数据库访问的对象
private Connection conn = null;

private Statement st = null;

private ResultSet rs = null;

private ResultSetMetaData rmd = null;

// 标签属性对应的get()和set()方法
public String getDriver() {
return driver;
}

public void setDriver(String driver) {
this.driver = driver;
}

public String getSql() {
return sql;
}

public void setSql(String sql) {
this.sql = sql;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getUser() {
return user;
}

public void setUser(String user) {
this.user = user;
}

public String getPass() {
return pass;
}

public void setPass(String pass) {
this.pass = pass;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public String[] getNames() {
return names;
}

public void setNames(String[] names) {
this.names = names;
}

@Override
public int doEndTag() throws JspException {
// 获取页面输出流
JspWriter out = pageContext.getOut();
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
String pageJsp = request.getRequestURI().substring(
(request.getContextPath().length() + 1));

try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pass);
st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = st.executeQuery(sql);

rs.last(); // 将指针移动到此 ResultSet 对象的最后一行
RowCount = rs.getRow(); // 返回查询结果有几条记录
PageCount = (RowCount + pageSize - 1) / pageSize; // 记算总页数

String strPage = pageContext.getRequest().getParameter("newpage"); // 取得待显示页码
if (strPage == null) {
// 此时显示第一页数据
Page = 1;
} else {
Page = java.lang.Integer.parseInt(strPage);
if (Page < 1)
Page = 1;
}
if (Page > PageCount) // 调整待显示的页码
Page = PageCount;
out.print("<form><table border='1' bgcolor='9999cc' ");

// 显示表头

if (names==null ) { // 不传表头(既names)过来时
/**
* 英文表头
* 英文系统可以用,呵呵
*/

rmd = rs.getMetaData(); //获取列的数目
int j = rmd.getColumnCount();

out.print("<tr>");
for (int m = 1; m <= j; m++) {
out.print(" <th><div align='center'>"
+ rmd.getColumnName(m) + "</div></th>");
}
out.print("</tr>");
// 在页面输出表格内容
int i = 0;
if (PageCount > 0) {
rs.absolute((Page - 1) * pageSize + 1); // 将记录指针定位到待显示页的第一条记录上 将指针移动到此 ResultSet 对象的给定行编号
while (i < pageSize && !rs.isAfterLast()) {
// AfterLast将指针移动到此 ResultSet 对象的末尾,正好位于最后一行之后
out.print("<tr>");
for (int m = 1; m <= j; m++) {
out.print(" <td><div align='center'>" + rs.getString(m)
+ "</div></td>");
}
out.print("</tr>");

rs.next();
i++;
}

}
out.print("<td colspan=" + j + ">"); //最后一行跨j列
} else { //传表头(既names)过来时
out.print("<tr>");
for (int m = 0; m < names.length; m++) {
out.print(" <th><div align='center'>" + names[m]
+ "</div></th>");
}

// 在页面输出表格内容
int i = 0;
if (PageCount > 0) {
rs.absolute((Page - 1) * pageSize + 1); // 将记录指针定位到待显示页的第一条记录上 将指针移动到此 ResultSet 对象的给定行编号
while (i < pageSize && !rs.isAfterLast()) {
// AfterLast将指针移动到此 ResultSet 对象的末尾,正好位于最后一行之后
out.print("<tr>");
for (int m = 1; m <= names.length; m++) {
out.print(" <td><div align='center'>" + rs.getString(m)
+ "</div></td>");
}
out.print("</tr>");
rs.next();
i++;
}

}
out.print("<td colspan=" + names.length + ">"); //最后一行跨names.length列
}

out.print("<div align='center'>第" + Page + "页 共" + PageCount + "页 "
+ RowCount + "条记录");

if (Page > 1) {

out.print("<a href=" + pageJsp + "?newpage=" + (Page - 1)
+ "><- </a>  ");
}
if (Page < PageCount) {

out.print("<a href=" + pageJsp + "?newpage=" + (Page + 1)
+ ">-></a> ");
}
out.print("转到第:<select name='newpage'>");
for (int k = 1; k <= PageCount; k++) {
out.print("<option value=" + k + ">" + k + "</option>");
}
out.print("</select>页");

out.print("<input type='submit' value='GO'></div></td></tr></table></form>");

} catch (Exception e) {
e.printStackTrace();
}
return super.doEndTag();
}

@Override
public void release() {
if (rs != null)
try {
rs.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
if (st != null)
try {
st.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
if (conn != null)
try {
conn.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}

}

*****************************************************************
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/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>test1</shortname>
<uri>http://struts.apache.org/tags-html</uri>
<tag>
<name>query</name>
<tagclass>ww.FenYe</tagclass>
<bodycontent>empty</bodycontent>
<attribute>
<name>driver</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>user</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pass</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>sql</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>pageSize</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>names</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
**********************************************************************
测试页面:
<%@ page language="java" pageEncoding="gbk"%>

<%@ taglib uri="/page.tld" prefix="p" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>MyJsp.jsp</title>

</head>

<body>
<%--
<% String[] kk={"姓名","密码","年龄"};%>
--%>
<p:query driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=pubs"
user="sa" pass="" sql="select * from employee" pageSize="35"/>

</body>
</html>
...全文
152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangzhigao 2008-11-30
  • 打赏
  • 举报
回复
恩,适合初学者自己研究
MnziIT 2008-10-05
  • 打赏
  • 举报
回复
复杂了点,可以简化,同意,值得学习,最好还简化下,公司里面一般用不上你写的分页
YiCaoYiMu08 2008-10-05
  • 打赏
  • 举报
回复
学习
sgelove 2008-10-04
  • 打赏
  • 举报
回复
不错。可以写在数据库里面更好,只需要传个参数就Ok。
mengweilil 2008-10-04
  • 打赏
  • 举报
回复
性能会是问题。

建议使用数据库内置分页select
zhizhi062 2008-10-04
  • 打赏
  • 举报
回复
我也写了一个通用分页 和楼主差不多。
只是持久化层 用的hibernate 样式仿照GOOGLE写的。
jiedamu 2008-10-04
  • 打赏
  • 举报
回复
楼主和我一样还没正式进入公司吧.. 想法是很好的,值得学习. 但是你这个分页不能算框架,在一般的场合用不上的. 值得表扬,我也从做过类似的..
stephenli 2008-10-03
  • 打赏
  • 举报
回复
学习!

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧