java.lang.NumberFormatException: null i

Hier kom ik met een probleem tijdens het uitvoeren van een bewerking zoals bijwerken, verwijderen en invoegen, maar het retourneert een null-waarde met uitzondering, vriendelijk iemand zou naar de code kunnen kijken als deze verkeerd is:

Fout:

HTTP Status 500 - null
type Exception report
message null
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.NumberFormatException: null
    java.lang.Integer.parseInt(Integer.java:454)
    java.lang.Integer.parseInt(Integer.java:527)
    Controller.ControllerTest.doGet(ControllerTest.java:48)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.37 logs.
Apache Tomcat/6.0.37

gebruiker.jsp:

<form method="POST" action='ControllerTest' name="frmAddUser">
  <jsp:useBean id="users" class="java.util.ArrayList" scope="request" />
        <% for(int i = 0; i < users.size(); i+=1) 
        { 
            UseBean user = (UseBean)users.get(i);
        %>
        id:<input type="text" name="ID" value="<%=user.getID() %>"><br/>
        Name:<input type="text" name="Name" value="<%= user.getName() %>"><br/>
        Password:<input type="text" name="password" value="<%= user.getPassword() %>"><br/>
        phoneno:<input type="text" name="Phoneo" value="<%= user.getPhoneo() %>"><br/>
        Emailid:<input type="text" name="Emailid" value="<%= user.getEmailID() %>">  <br/> 
        <%} %>
         <input type="submit" value="Submit" />
    </form>

LISTUSER.JSP

 <body>
<table border=1>
<thead>
    <tr>
    <th>Id</th>
    <th>Name</th>
    <th>password</th>
    <th>phoneno</th>
    <th>emailid</th>
    <th colspan=2>Action</th>
    </tr>
</thead>
<tbody>
    <jsp:useBean id="users" class="java.util.ArrayList" scope="request" />
    <% for(int i = 0; i < users.size(); i+=1) 
    { 
        UseBean user = (UseBean)users.get(i);
    %>
        <tr>
        <td><%= user.getID() %></td>
        <td><%= user.getName() %></td>
        <td><%= user.getPassword() %></td>
        <td><%= user.getEmailID() %></td>
        <td><%= user.getPhoneo() %></td>
        <td><a href="ControllerTest?action=edit&userId=<%= user.getID() %>" >Update</a></td>
        <td><a href="ControllerTest?action=delete&userId=<%= user.getID() %>">Delete</a></td>
        </tr>
    <% } %>
</tbody>
</table>
<p>
<a href="ControllerTest?action=insert">Add User</a>
</p>

ControlEltest.java:

package Controller;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import dao.UserDao;
import dbBean.UseBean;
public class ControllerTest extends HttpServlet
{
    private static final long serialVersionUID = 1L;
    private static String INSERT_OR_EDIT = "/user.jsp";
    private static String LIST_USER = "/listUser.jsp";
    private UserDao dao;
    public ControllerTest()
    {
        super();
        dao = new UserDao();
    }
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {
        String forward = "";
        String action = request.getParameter("action");
        if (action.equalsIgnoreCase("delete"))
        {
            try
            {
                int userId = Integer.parseInt(request.getParameter("userId"));
                dao.deleteUser(userId);
                forward = LIST_USER;
                request.setAttribute("users", dao.getAllUsers());
            }
            catch (NumberFormatException ex)
            {
                System.out.println("Error occured with during conversion delete");
            }
        } 
        else if (action.equalsIgnoreCase("edit"))
        {
            forward = INSERT_OR_EDIT;
            try
            {
                int userId = Integer.parseInt(request.getParameter("userId"));
                UseBean bean = dao.getUserById(userId);
                request.setAttribute("user", bean);
            } catch (NumberFormatException ex)
            {
                System.out.println("Error occured with during conversion edit");
            }
        }
        else if (action.equalsIgnoreCase("listUser"))
        {
            forward = LIST_USER;
            request.setAttribute("users", dao.getAllUsers());
        } else
        {
            forward = INSERT_OR_EDIT;
        }
        RequestDispatcher view = request.getRequestDispatcher(forward);
        view.forward(request, response);
    }
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException
    {
        try
        {
            UseBean bean = new UseBean();
            bean.setName(request.getParameter("Name"));
            bean.setPassword(request.getParameter("password"));
            bean.setPhoneo(request.getParameter("Phoneo"));
            bean.setEmailID(request.getParameter("Emailid"));
            String userid = request.getParameter("ID");
            if (userid == null || userid.isEmpty())
            {
                dao.addUser(bean);
            } else
            {
                bean.setID(Integer.parseInt(userid));
                dao.updateUser(bean);
            }
            RequestDispatcher view = request.getRequestDispatcher(LIST_USER);
            request.setAttribute("users", dao.getAllUsers());
            view.forward(request, response);
        }
        catch (Exception e)
        {
            e.printStackTrace();
            System.out.println("erro occuring in update code");
        }
    }
}

Antwoord 1, autoriteit 100%

U krijgt een NumberFormatException wanneer u probeert de lege tekenreeks “” om te zetten in een geheel getal…


Antwoord 2, autoriteit 62%

U krijgt een NumberFormatException als u geen geldig nummer doorgeeft aan Integer.parseInt()

int userId = Integer.parseInt(request.getParameter("userid"));

Probeer de waarde van request.getParameter(“userid”) af te drukken en controleer.


Antwoord 3, autoriteit 6%

De pagina waarnaar u doorstuurt, bevat mogelijk conversies van tekenreeksen naar gehele getallen die de fout kunnen veroorzaken


Antwoord 4, autoriteit 6%

Voordat je een string ontleden, moet je null checken en trimmen en vervolgens ontleden. Als NumberFormatException optreedt, handel het dan af.

Als je op deze manier in de problemen komt, plaats dan debug-statements en analyseer
wat eigenlijk uitzondering veroorzaakt. null of leeg of witruimte of string? Dan kun je het gemakkelijk aan.

Integer userId= parseToNumber(request.getParameter("userId"));
//check for not null and proceed
// returns null if receivedParam = "", "some string", null or number with space
private Integer parseToNumber(String receivedParam)
{
    System.out.println("received param:"+receivedParam);
    if (receivedParam != null && !receivedParam.trim().isEmpty())
    {
        try
        {
            return Integer.parseInt(receivedParam.trim());
        }
        catch (NumberFormatException nfe)
        {
            System.out.println("received param is not a number");
            return null;
        }
    }
    else
    {
        System.out.println("received param is null or empty");
        return null;
    }
}

Antwoord 5

In het bestand user.jsp en listuser.jsp. je hebt ruimte gebruikt voor het herschrijven van URL’s.

je moet

. gebruiken

   <tr>
    <td><%=user.getID()%></td>
    <td><%=user.getName()%></td>
    <td><%=user.getPassword()%></td>
    <td><%=user.getEmailID()%></td>
    <td><%=user.getPhoneo()%></td>
    <td><a href="ControllerTest?action=edit&userId=<%=user.getID()%>" >Update</a></td>
    <td><a href="ControllerTest?action=delete&userId=<%=user.getID()%>">Delete</a></td>
    </tr>          

Other episodes