你就确定客户端一定会给你好好的数字字符串吗?假定客户端不传入这个strPage参数,那request.getParameter("strPage")==null,再转就会报NullPointerException了,如果客户传入strPage="10000 11A_bZ"这类的值,那你parseInt()处理就出报你现在出现的这个错误了。我通常的处理代码是这样的int strPage=0; //给一个默认值
try{
strPage=Integer.parseInt(request.getParameter("strPage").trim());
if(strPage<0)strPage=0;//万一用户给一个负值,可能对程序有影响
/* 这两步可以改成一步
* strPage=Math.abs(Integer.parseInt(request.getParameter("strPage").trim());
*/
}
catch(Exception e){
//虽然你认为你的处理已经考虑了诸多方面可能带来的Exception,但是客户端传来的数据是永远不可靠的,还是慎重点,多修些栏杆防错的好
strPage=0;
}
try{
strPage=Integer.parseInt(request.getParameter("strPage").trim());
if(strPage<0)strPage=0;//万一用户给一个负值,可能对程序有影响
/* 这两步可以改成一步
* strPage=Math.abs(Integer.parseInt(request.getParameter("strPage").trim());
*/
}
catch(Exception e){
//虽然你认为你的处理已经考虑了诸多方面可能带来的Exception,但是客户端传来的数据是永远不可靠的,还是慎重点,多修些栏杆防错的好
strPage=0;
}
intPage = java.lang.Integer.parseInt(strPage);
int mtype=Integer.parseInt(request.getParameter("mtype"));strPage = request.getParameter("page");System.out.println("strpage is"+strPage);结果是:
strpage is null请教一下
<a href="show.jsp?page=<%=intPage+1%>">下一页</a>中的show.jsp是本页,为什么“page”参数传递的会是null呢?
at java.lang.Integer.parseInt(Integer.java:394)
at java.lang.Integer.parseInt(Integer.java:476)
可以看出,是NULL的原因,才引起了 下面两个的错误
at java.lang.Integer.parseInt(Integer.java:394)
at java.lang.Integer.parseInt(Integer.java:476)
抛出数据的异常在intPage = java.lang.Integer.parseInt(strPage);
下加
if(intPage==null)
{
inPage="1";
}
byte a[]=inPage.getBytes("ISO_8859_1");
inPage=new String(a);
但不一定是他举的那一个,因为你其它还有几个参数???在参数使用时你最好判断是否为null,在为空时给它赋初值再作操作。
如string对象,为null是你可以给它负初值 if(test==null)test = '';
<!?以下代码为实现分页功能-->
<%///////////////算出共多少页
int t;
int mtotal;
t=0;
String cate;
cate=request.getParameter("id");
//执行数据库查询,计算出满足条件的商品的数量
String strSQLsize="SELECT id FROM book ";
ResultSet RSsize = workM.executeQuery(strSQLsize);
while(RSsize.next()){
t=t+1;
}
//如果纪录总数除以每页的显示个数,余数大于0,那么
//逻辑页数应该为商+1;
//否则,逻辑页数应为所得的商
//t表示记录的总数
//10表示了每页所显示的个数
//mtotal为逻辑页数
if((t%3)>0){
mtotal=t/3+1;
}else mtotal=t/3;
%>
<%!String pageNo, mTmp;
int i, j, k;
%>
<% //pageNo表示请求的是第几页
pageNo = request.getParameter("pageNo");
//如果pageNo为null值,则赋值为1
if(pageNo == null){
pageNo = "1";
}
//j表示的是pageNo对应的整型值
j = Integer.parseInt(pageNo);
//当j的值小于1时,赋值为1
if(j < 1)
j = 1;
//当j的值大于总页数时,赋值为mtotal
if(j > mtotal)
j = mtotal;
%>
<% // 读取数据库记录
String strSQL="SELECT * FROM book order by id desc";
ResultSet RSa = workM.executeQuery(strSQL);
//记录集移动到相应的位置
//j为逻辑页数
for(k = 0;k < (j-1)*3;k++)
{
RSa.next();
}
i = 0;
k = 1;
while (RSa.next()) {
i = i + 1;
//超过3条
if(i == 4)
{
k = 0;
break;
}
out.print("<tr height='23'><td><li><a href=book.jsp?id="+RSa.getInt("id"));
out.print(" target='_blank'>"+getStr(RSa.getString("name"))+"</a></td><td align='left'>");
out.print(getStr(RSa.getString("author"))+"</td><td>");
out.print(category(RSa.getInt("category"))+"</td><td></td></tr>");
}
i = i - k;
//关闭记录集
RSa.close();
%>
<% //以下代码行是用来显示页面数的
//当j大于1时,就会显示“第一页”、“上一页”字样
if(j > 1)
{
%>
<a href="category.jsp?id=<%=cate%>&pageNo=1">第一页</a>
<%
int ii = Integer.parseInt(pageNo,10);
if(ii > 1)
ii = ii -1;
String ssTmp = Integer.toString(ii);
%>
<a href="category.jsp?id=<%=cate%>&pageNo=<%=ssTmp%>">上一页</a>
<%
}
//同样地,当j小于总逻辑页数时,就会显示“下一页”、“最后页”字样
if(j < mtotal)
{
int ii = Integer.parseInt(pageNo,10);
if(ii < mtotal)
ii = ii + 1;
String ssTmp = Integer.toString(ii);
%>
<a href="category.jsp?id=<%=cate%>&pageNo=<%=ssTmp%>">下一页</a>
<a href="category.jsp?id=<%=cate%>&pageNo=<%=mtotal%>">最后页</a>
<%
}
if(mtotal < j)
j = mtotal;
%> <tr><td height="1" bgcolor="" colspan="2">
<hr color="#3399ff"></td>
<td colspan=2>发布书的信息</td><tr>
<tr><td height="32" colspan=4>结果共<%=mtotal%>页,显示第<%=j%>页</td></tr>
<tr>
<td align="left" colspan="4" height="32">
<font color=blue><b>商品分类:</b></font>
<a href="category.jsp?id=1" target="_blank">计算机类</a> |
<a href="category.jsp?id=2" target="_blank">英语类</a> |
<a href="category.jsp?id=3" target="_blank">其他类</a> |
<p height=50> </p>
</td> </tr>
</table>
import java.util.*;/**
* Title:分页
* Description:
* Copyright: Copyright (c) 2004
* Company:
* author:颜喜班
* @version 1.0
*/
public class SplitPager
{
/*
* _sql_str:传入的sql语句
* _total_records: 总记录数目
* _pageSize: 每页显示的记录数目
* _page: 所分的逻辑页数
*/
private Connection con=null;
private Statement stmt=null;
private ResultSet rs=null;
private ResultSetMetaData rsmd=null;
private String _sql_str;
private int _total_records;
private int _pages;
private int _pagesize;
public void setConnection(Connection con)
{
this.con=con;
if (this.con == null)
System.out.println("Failure to get a connection!");
else
System.out.println("Success to get a connection!");
}
public void initialize(String sqlStr,int pageSize)
{
this._sql_str=sqlStr;
this._pagesize=pageSize;
try{
stmt=this.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(this._sql_str);
rsmd=rs.getMetaData();
if (rs!=null)
{
rs.last();
this._total_records = rs.getRow();
rs.first();
this._pages = (this._total_records - 1) / this._pagesize + 1;
}
}
catch(SQLException e){System.out.println(e.toString()); }
}
public Vector getPage(int ipage){
Vector vData=new Vector();
int n=ipage;
int m=0;
m=(n-1)*this._pagesize+1;
try{
if (rs!=null)
{
rs.absolute(m);
for(int i=0;i<this._pagesize;i++){
String[] sData=new String[rsmd.getColumnCount()];
for(int j=0;j<rsmd.getColumnCount();j++)
{
sData[j]=rs.getString(j+1);
}
if (sData==null)
{
break;
}
vData.addElement(sData);
rs.next();
}
}
rs.close();
stmt.close();
}
catch(SQLException e){System.out.println(e.toString()); }
return vData;
}
public int getPages()
{
return this._pages;
}
public int getTotalRecords()
{
return this._total_records;
}}
jsp+javaBeanhttp://www.52free.com/bbs/index.php?act=ST&f=8&t=148&st=0#entry298如果数据库不同只需修改javaBean中的驱动即可,页面显示数可以自己控制。