自己做的分页标签
自己做的,请高手指点指点
先是分页类代码:
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>