你就确定客户端一定会给你好好的数字字符串吗?假定客户端不传入这个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;
}

解决方案 »

  1.   

    if (strPage!=null)
        intPage = java.lang.Integer.parseInt(strPage);
      

  2.   

    我用:
    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呢?
      

  3.   

    java.lang.NumberFormatException: 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);
      

  4.   

    这个错误说明你用了一个空值,正如 rootwuyu(wuyu) ( )说的那样
    但不一定是他举的那一个,因为你其它还有几个参数???在参数使用时你最好判断是否为null,在为空时给它赋初值再作操作。
    如string对象,为null是你可以给它负初值  if(test==null)test = '';
      

  5.   

    书上一段代码:
              <!?以下代码为实现分页功能-->
                <%///////////////算出共多少页
                        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>&nbsp;</p> 
          </td> </tr>
      </table>
      

  6.   

    如果还不好的话,检查基础类可能Integer.parseInt()有问题!
      

  7.   

    这样的分页效率会高吗?szpqq(Gavin)所说的书上的这段
      

  8.   

    你的strPage = request.getParameter("page"); 其实能够传递过去的 写法也没有错误但是你的页面可能是另外一些参数没有传递到当你的page=2,3的时候  即 前面你可能有个 select × from user where id=“+id;  想想 id 当你的page再次请求page=2的时候  id的值是否存在。  这个才是异常的主要原因正好我也遇到了,解决了 把你的代码给我一份 谢谢!  QQ:660728 
      

  9.   

    package hzdq.fdjc.Common;import java.sql.*;
    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;
        }}
      

  10.   

    好东西当然要分享啊!看我的:经典分页程序
    jsp+javaBeanhttp://www.52free.com/bbs/index.php?act=ST&f=8&t=148&st=0#entry298如果数据库不同只需修改javaBean中的驱动即可,页面显示数可以自己控制。