读书人

高分求救JSP分页有关问题

发布时间: 2011-12-03 22:57:58 作者: rapoo

高分求救JSP分页问题
下面是源码,后面我会说明问题:
//---------------------------------
//分页的配置
public class PageConf
{
public static final int PAGE_SIZE_NORMAL = 15;
}
//--------------------------------
//page类
public class Page implements Serializable {
private static final long serialVersionUID = 1L;
public static Page EMPTY_PAGE=new Page();
private int rowsPerPage = PageConf.PAGE_SIZE_NORMAL; //页面大小,记录条数
private int start; //本页数据在数据库中的起始位置
private int curRowCount ,maxRowCount; //本页包含的数据条数
private Vector data; //当前页的数据
private int curPageNo; //当前页码
private int maxPageNo; //总页数


/**
/*默认构造方法,只构造空页
*
*
*/
public Page()
{
this.init(0,0,0,PageConf.PAGE_SIZE_NORMAL,new Vector());
}
public Page(int start, int curRowCount , int maxRowCount, int rowsPerPage, Vector data)
{
this.init(start, curRowCount , maxRowCount, rowsPerPage,data);
}

/** 分页数据初始方法,由子类调用
* @param start 本页数据在数据库中的起始位置
* @param curRowCount 本页包含的数据条数
* @param maxRowCount 数据库中总记录条数
* @param rowsPerPage 本页容量
* @param data 本页包含的数据
*/
public void init(int start, int curRowCount , int maxRowCount, int rowsPerPage, Vector data)
{
this.curRowCount =curRowCount ;
this.rowsPerPage = rowsPerPage;
this.start = start;
this.maxRowCount = maxRowCount;
this.data=data;

if (curRowCount > maxRowCount) //本页包含记录数大于总的记录数
{
//throw new RuntimeException( "记录条数大于总条数?! ");
}

this.curPageNo = (start -1)/rowsPerPage +1;
this.maxPageNo = (maxRowCount + rowsPerPage -1) / rowsPerPage;

if (maxRowCount==0 && curRowCount ==0)
{
this.curPageNo = 1;
this.maxPageNo = 1;
}
// System.out.println( "Start Index to Page No: " + start + "- " + curPageNo);


}
//^^^^^^省略一些
public void countmaxPageNo() //根据总行数计算总页数
{
if (this.maxRowCount % this.rowsPerPage==0)
{
this.maxPageNo = this.maxRowCount/this.rowsPerPage;
}
else
{
this.maxPageNo = this.maxRowCount/this.rowsPerPage + 1;
}
}

/**
* getter and setter methods
* @return
*/

public String toString()
{
return new String( "maxRowCount: "+this.getMaxRowCount()+
"maxPageNo: "+this.getmaxPageNo()+
"CurPageNo: "+this.getCurPageNo());
}



}
//--------------------------
//管理page类
package com.data;

import com.db.DBConnection;
import com.data.Page;
import com.data.PageConf;
import java.util.Vector;

public class PageView {
private DBConnection dbc;
private Page page;
private Vector <Object[]> vctr;

public String SQLS;//

public Page getPage() {
return page;
}

public PageView()
{
this.dbc=new DBConnection();
this.page=new Page();
}
/**
* 列出指定页码的UserInfoBean的page对象
* @param sqlCnst 查询条件
* @param pageNo 要查询的页码
* @param pageSize 页面大小,每页包含的记录数
* @return
*/
public Page listUser(String sqlCnst,int pageNo,int pageSize)
{
StringBuffer sb=new StringBuffer();
sb.append( "select count(*) from TestTable ");
sb.append(sqlCnst);
this.dbc.executeQuery(sb.toString());
this.page.setMaxRowCount(this.dbc.rstGetInt(1));//设置page对象中的最大记录数
this.page.setRowsPerPage(pageSize); //设置每页记录数目
this.page.setCurPageNo(pageNo); ////设置当前页码
if(pageNo> this.page.getmaxPageNo())
{
return this.page.EMPTY_PAGE;
}
sb.delete(0, sb.length());
sb.append( "select top ");
sb.append(PageConf.PAGE_SIZE_NORMAL);
sb.append( " * from TestTable where (ID > (select max(ID) from (select top ");
sb.append(PageConf.PAGE_SIZE_NORMAL*(pageNo-1));
sb.append( " ID from TestTable ");
sb.append(sqlCnst);
sb.append( " order by ID) as t)) order by ID ");
//下面的字符串我是我用替换上面sb产生的字符串的,结果也是打印不出
this.SQLS= "SELECT TOP 20 * FROM TestTable WHERE ID > (SELECT MAX(id) FROM (SELECT TOP 200 id FROM TestTable ORDER BY id) AS T) ORDER BY ID ";
this.dbc.executeQuery(SQLS);//sb.toString());
while(this.dbc.rstNext())
{
Object[] obj=new Object[5];
obj[0]=Integer.valueOf(this.dbc.rstGetInt( "ID "));
obj[1]=this.dbc.rstGetString( "FirstName ");


obj[2]=this.dbc.rstGetString( "LastName ");
obj[3]=this.dbc.rstGetString( "Country ");
obj[4]=this.dbc.rstGetString( "Note ");
this.vctr.add(obj);
}
this.page.setData(this.vctr);
return this.page;
}
public String getSQLS()
{
return this.SQLS;
}

}
//-----------------
//servlet中的代码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// TODO Auto-generated method stub
String userId=request.getParameter( "userId ");
response.setContentType( "text/html;chaeset=gb2312 ");
response.setCharacterEncoding( "gb2312 ");
String temp=null;
if(userId==null) //
{
try
{
String jmpage=request.getParameter( "page ");
if(jmpage==null)
{
jmpage= "1 ";
}
int pageNo;
try
{
pageNo=Integer.parseInt(jmpage);
}
catch(Exception e)
{
pageNo=1;
}
PageView pv=new PageView();
Page pg=pv.listUser( " ",pageNo,PageConf.PAGE_SIZE_NORMAL);
request.setAttribute( "pagedata ", pg);
//RequestDispatcher dis=request.getRequestDispatcher( "/admin/viewuser.jsp? "+request.getQueryString());//?userId=-1&page= "+jmpage ");
//dis.forward(request, response);
//下面是我测试用的结果打印出来SQL 语句是null???
PrintWriter pw=response.getWriter();
pw.println( " <h1> 结果: </h1> "+ " <br /> ");
pw.println( "SQL Query String: "+pv.getSQLS()+ " <br /> ");
pw.print(pg.toString());
}
catch(Exception e)
{
System.out.println(e.toString());
PrintWriter pw=response.getWriter();
pw.println( " <h1> 产生异常! </h1> "+ " <br /> ");
pw.println(temp);
pw.println( " <h4> e.toString(): </h4> "+e.toString()+ " <br /> ");
pw.println( " <h4> e.getMessage(): </h4> "+e.getMessage()+ " <br /> ");
pw.println( " <hr /> ");
e.printStackTrace(pw);
}
}
else //查看
{
PrintWriter pw=response.getWriter();
pw.println( " <h1> 反反复复反反复复! </h1> ");
}
}


-------------------------------------
错误代码是:
产生异常!

null
e.toString():
java.lang.NullPointerException
e.getMessage():
null
java.lang.NullPointerException at com.data.PageView.listUser(PageView.java:62) at com.util.ViewUserServlet.doPost(ViewUserServlet.java:55) at com.util.ViewUserServlet.doGet(ViewUserServlet.java:22) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at com.qxauc.authenticate.AdminAccessCtrlFilter.doFilter(AdminAccessCtrlFilter.java:48) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at



[解决办法]
vctr 你只是声明,没有实力化.
所以null
[解决办法]
vctr在构造器里面初始化一下
[解决办法]
没有细看
怎么会有Object[] obj=new Object[5];这种浪费资源的语句
建议List或者Collection
[解决办法]
你这个也太烦了嘛.一个分页就这么多.似乎有点轻重不分
[解决办法]
csdn里搜索一下。有很多分页的解决方案.
[解决办法]
没有给初始值报null
[解决办法]
一个sql语句就可搞定的东东,搞这么复杂
[解决办法]
代码写的不是很成功。把一个简单的功能写的太复杂了。你挑这个程序的错误还不如去用别人的分页呢。
[解决办法]
rs=stmt.executeQuery(strSql);
CachedRowSetImpl crs = new CachedRowSetImpl();
crs.setPageSize(Constants.pageSize);
crs.populate(rs);
rowCount = crs.size();

..........
crs.populate(rs, (curPage - 1) * crs.getPageSize() + 1);
详细的你查一下帮助,祝你好运。
[解决办法]
丁..
[解决办法]
sb.append( "select count(*) from TestTable ");
sb.append(sqlCnst);
this.dbc.executeQuery(sb.toString());
this.page.setMaxRowCount(this.dbc.rstGetInt(1));
=============================================
这里的sqlCnst是什么?
还有这个方法
this.dbc.executeQuery(sb.toString());赋值给resultset的操作没有问题吗?this.dbc.rstGetInt这个方法里面用到的rs跟你刚刚赋值的是同一个rs吗?

读书人网 >Java Web开发

热点推荐