页面没有传id的值,所以强转类型出错!!
修改一下
int id = request.getParameter("id")!=null && !request.getParameter("id").trim().equals("")?Integer.parseInt(request.getParameter("id")):0;

解决方案 »

  1.   


    谢谢!这个问题解决了.不过还有点疑问,比如我传过来的数据是空,我想判断是否为空然后在本页面进行提示.我在servlet中加了这段
    if( request.getParameter("id")==null || request.getParameter("name")==null || request.getParameter("email")==null)
    {
    System.out.println("编号,姓名,邮箱都不能为空!");
    request.getRequestDispatcher("update.jsp").forward(request, response);
    return;
    }不知道对不对?我试了一下还是会提示出错.
    java.lang.NumberFormatException: For input string: ""
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    java.lang.Integer.parseInt(Integer.java:468)
    java.lang.Integer.parseInt(Integer.java:497)
    com.ch.control.Update.doPost(Update.java:38)还有一个问题,我做的是更新功能,jsp中输入了但提示更新失败.劳烦高手看看是jsp问题还是servlet的问题?servlet: public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html");
    int id = request.getParameter("id")!=null && !request.getParameter("id").trim().equals("")?Integer.parseInt(request.getParameter("id")):0; 
    HttpSession session=request.getSession();
    String sessionName=(String)session.getAttribute("name");
    String name=request.getParameter("name");
    String email=request.getParameter("email");
    Message message=new Message();
    MessageDAO dao=new MessageDAO();
    message.setId(id);
    message.setName(name);
    message.setEmail(email);
         try {
         dao.update(message);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
        request.getRequestDispatcher("update.jsp").forward(request, response);
    }jsp:<body>
         <FORM action="/ch9/Update" method=post>
    输入要修改的数据<BR><BR>编号:<Input type=text name="id">
    <BR>姓名:<Input type=text name="name">
    <BR>邮箱:<Input type=text name="email">
      <Input type=submit name="g" value="提交">
      <c:if test="${param.id!=null}">
    <c:choose>
     <c:when test="${requestScope.is}">
    <br>更新成功
    </c:when>
    <c:otherwise>
    <br>更新失败
    </c:otherwise>
    </c:choose>
    </c:if>
    <br><a href="Result.jsp">返回
      </FORM>
      </body>麻烦了谢谢
      

  2.   


    谢谢!这个问题解决了.不过还有点疑问,比如我传过来的数据是空,我想判断是否为空然后在本页面进行提示.我在servlet中加了这段
    if( request.getParameter("id")==null || request.getParameter("name")==null || request.getParameter("email")==null)
    {
    System.out.println("编号,姓名,邮箱都不能为空!");
    request.getRequestDispatcher("update.jsp").forward(request, response);
    return;
    }不知道对不对?我试了一下还是会提示出错.
    java.lang.NumberFormatException: For input string: ""
    java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    java.lang.Integer.parseInt(Integer.java:468)
    java.lang.Integer.parseInt(Integer.java:497)
    com.ch.control.Update.doPost(Update.java:38)还有一个问题,我做的是更新功能,jsp中输入了但提示更新失败.劳烦高手看看是jsp问题还是servlet的问题?servlet: public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException { response.setContentType("text/html");
    int id = request.getParameter("id")!=null && !request.getParameter("id").trim().equals("")?Integer.parseInt(request.getParameter("id")):0; 
    HttpSession session=request.getSession();
    String sessionName=(String)session.getAttribute("name");
    String name=request.getParameter("name");
    String email=request.getParameter("email");
    Message message=new Message();
    MessageDAO dao=new MessageDAO();
    message.setId(id);
    message.setName(name);
    message.setEmail(email);
         try {
         dao.update(message);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
        request.getRequestDispatcher("update.jsp").forward(request, response);
    }jsp:<body>
         <FORM action="/ch9/Update" method=post>
    输入要修改的数据<BR><BR>编号:<Input type=text name="id">
    <BR>姓名:<Input type=text name="name">
    <BR>邮箱:<Input type=text name="email">
      <Input type=submit name="g" value="提交">
      <c:if test="${param.id!=null}">
    <c:choose>
     <c:when test="${requestScope.is}">
    <br>更新成功
    </c:when>
    <c:otherwise>
    <br>更新失败
    </c:otherwise>
    </c:choose>
    </c:if>
    <br><a href="Result.jsp">返回
      </FORM>
      </body>麻烦了谢谢在服务器端提示有什么用,在js里边判断吧
      

  3.   

    啊对了不知道是不是DAO有问题..public void update(Message message) {
    Connection conn=null;
    PreparedStatement statement=null;
    SQLException ex=null;
    try{
    conn = (Connection) DriverManager.getConnection(jdbcUrl, user, psw);
    statement.executeUpdate("update t_message set id=?,name=?email=?");
    statement.setInt(1, message.getId());
    statement.setString(2, message.getName());
    statement.setString(3, message.getEmail());
    }谢谢!!
      

  4.   

    servlet中IF判断不用加return返回,request.getRequestDispatcher("update.jsp").forward(request, response);这句话直接会跳转到其它地方,后面的return不会执行!
    像编号、姓名、邮箱页面输入,一般在页面写JS做判断!
    还是类型转换做问题了,"" 不能转INT类型,把48中定义的变量打印出来!
      

  5.   

    在服务器端提示有什么用,在js里边判断吧这样啊,一开始我是在JSP中做的.不过好像失败了..我再试试
      

  6.   

    48行是这个
       return new NumberFormatException("For input string: \"" + s + "\"");
      

  7.   

    啊对了不知道是不是DAO有问题..public void update(Message message) {
    Connection conn=null;
    PreparedStatement statement=null;
    SQLException ex=null;
    try{
    conn = (Connection) DriverManager.getConnection(jdbcUrl, user, psw);
    statement.executeUpdate("update t_message set id=?,name=?email=?");
    statement.setInt(1, message.getId());
    statement.setString(2, message.getName());
    statement.setString(3, message.getEmail());
    }谢谢!!conn 把 statement 实例出来,要不statement为空!
    statement= conn.createStatement() ;
    update 语句 你是想修改表中所有数据?
    如果不是修改成根据ID修改
    update t_message set name=?email=? where id = ?再有就是你那个48行中的try 代码块贴出来看看!
      

  8.   

    啊对了不知道是不是DAO有问题..public void update(Message message) {
    Connection conn=null;
    PreparedStatement statement=null;
    SQLException ex=null;
    try{
    conn = (Connection) DriverManager.getConnection(jdbcUrl, user, psw);
    statement.executeUpdate("update t_message set id=?,name=?email=?");
    statement.setInt(1, message.getId());
    statement.setString(2, message.getName());
    statement.setString(3, message.getEmail());
    }谢谢!!conn 把 statement 实例出来,要不statement为空!
    statement= conn.createStatement() ;
    update 语句 你是想修改表中所有数据?
    如果不是修改成根据ID修改
    update t_message set name=?email=? where id = ?再有就是你那个48行中的try 代码块贴出来看看!
    提示48行错误的那个文件public
    class NumberFormatException extends IllegalArgumentException {
        static final long serialVersionUID = -2848938806368998894L;    /**
         * Constructs a <code>NumberFormatException</code> with no detail message.
         */
        public NumberFormatException () {
    super();
        }    /**
         * Constructs a <code>NumberFormatException</code> with the 
         * specified detail message. 
         *
         * @param   s   the detail message.
         */
        public NumberFormatException (String s) {
    super (s);
        }    /**
         * Factory method for making a <code>NumberFormatException</code>
         * given the specified input which caused the error.
         *
         * @param   s   the input causing the error
         */
        static NumberFormatException forInputString(String s) {
            return new NumberFormatException("For input string: \"" + s + "\"");
        }
    }return那句是48句
      

  9.   

    null!=request.get....null写到前面就不会抛错了
      

  10.   


    请问是哪句?
    int id = request.getParameter("id")!=null && !request.getParameter("id").trim().equals("")?Integer.parseInt(request.getParameter("id")):0;这句吗?
      

  11.   

      
    请问是哪句?
    int id = request.getParameter("id")!=null && !request.getParameter("id").trim().equals("")?Integer.parseInt(request.getParameter("id")):0;这句吗?
    你前台ID还是没有传值过来!text name="id" 没有填写数据!你在前台加一个js验证,如果ID为空不让提交!
      

  12.   


    请问是哪句?
    int id = request.getParameter("id")!=null && !request.getParameter("id").trim().equals("")?Integer.parseInt(request.getParameter("id")):0;这句吗?
    你试试把null写到判断的后面,运行一下试试就知道了 String id = null;
    if(null != id || !"".equals(id)) {
    System.out.println(id);
    }
      

  13.   

    request.getParameter("id")为空,贴出你前台的代码就知道原因了
      

  14.   


    请问是哪句?
    int id = request.getParameter("id")!=null && !request.getParameter("id").trim().equals("")?Integer.parseInt(request.getParameter("id")):0;这句吗?
    你前台ID还是没有传值过来!text name="id" 没有填写数据!你在前台加一个js验证,如果ID为空不让提交!
    还没学JS呢..验证就先不做了.我好像找到问题了.那个ID传不过去JSP那.
    在servlet中试用了request和url后面跟参数都不成功.
    JSP中是这样<%out.println(request.getAttribute("id"));%>servlet中       String action=request.getParameter("action");
    int id=Integer.parseInt(request.getParameter("id"));
    HttpSession session=request.getSession();
    String sessionName=(String)session.getAttribute("name");
    String sessionId = request.getParameter("id");//
    String name=request.getParameter("name");
    String email=request.getParameter("email");
    Message message=new Message();
    MessageDAO dao=new MessageDAO();
    message.setId(id);
    message.setName(name);
    message.setEmail(email);
    request.setAttribute("id",sessionId);//
    //判断从页面提交上来的是哪一种操作
        if("update".equals(action)){
        request.getRequestDispatcher("/update.jsp").forward(request, response);不知道我后面加的这两句有没有用?
    request.setAttribute("id",sessionId);
    String sessionId = request.getParameter("id");还是直接url后面跟id?
    两种都试过了就是取不到.jsp显示null.
      

  15.   


    JSP的代码 <c:forEach var="message" items="${sessionScope.messages}">
       <form action="/ch9/UpdateServelet" method=post>
       <tr>
       <td>
       ${message.id}
       <input type="hidden" name="id" value="${message.id}" />
       </td>
        <td>
       <input name="name" type=text value="${message.name}" style="border:0;width=100%;height:100%"/>
       </td>
        <td>
       <input name="email" type=text value="${message.email}" style="border:0;width=100%;height:100%"/>
       </td>
        <td>
       <input name="action" type="submit" value="update" />
       </td>
        <td>
      <input name="action" type="submit" value="delete" />
       </td>
       </tr>
       </form>
      </c:forEach>我做了更新了删除功能,删除的话可以取到id,但是更新那不行.