Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
6
respuestas

Error al cargar la Lista me sale null

Al momento de cargar la pagina jsp me sale un error porque la lista esta null. en la clase DB esta lo siguiente:

    private static List<Empresa> listaEmpresas = new ArrayList<>();
    //lo que hace es una ve que incia la clase ya inicia lo que coloquemos aqui adentro
    static {
        Empresa empresa = new Empresa();
        empresa.setNombre("alura");
        Empresa empresa2 = new Empresa();
        empresa2.setNombre("HBO");
        listaEmpresas.add(empresa);
        listaEmpresas.add(empresa2);
    }
    public void agregarEmpresa(Empresa empresa) {        
        DB.listaEmpresas.add(empresa);        
    }

    public List<Empresa> getEmpresas(){
        return DB.listaEmpresas;    
    }

en mi clase ListaEmpresasServlet donde envio la lista de empresas a mi archivo jsp esta lo siguiente:

public class ListaEmpresasServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;


    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        DB baseDeDatos = new DB();
        List<Empresa> listaEmpresas = baseDeDatos.getEmpresas();

        request.setAttribute("empresas", listaEmpresas);

        RequestDispatcher rd = request.getRequestDispatcher("/listaEmpresas.jsp");
        rd.forward(request, response);            
    }
}

En mi archivo .jsp llamado listaEmpresas.jsp esta lo siguiente:


<%@page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@page import="java.util.List"%>
<%@page import="com.alura.gerenciador.servlet.Empresa"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>    
  Lista de empresas: <br />
    <ul>
    <%
        List<Empresa> lista = (List<Empresa>)request.getAttribute("empresas");
        for (Empresa empresa : lista) {
    %>
        <li><%= empresa.getNombre() %></li>
    <%
        }
    %>
    </ul>
</body>
</html>

me da el siguiente error:

Tipo Informe de Excepción

mensaje Ha sucedido una excepción al procesar la página JSP [/listaEmpresas.jsp] en línea [17]

Descripción El servidor encontró un error interno que hizo que no pudiera rellenar este requerimiento.

excepción

org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP [/listaEmpresas.jsp] en línea [17]

14:     <ul>
15:     <%
16:         List<Empresa> lista = (List<Empresa>)request.getAttribute("empresas");
17:         for (Empresa empresa : lista) {
18:     %>
19:         <li><%= empresa.getNombre() %></li>
20:     <%


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:599)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:488)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
causa raíz

java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because "lista" is null
    org.apache.jsp.listaEmpresas_jsp._jspService(listaEmpresas_jsp.java:141)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:456)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:380)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:328)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
nota La traza completa de la causa de este error se encuentra en los archivos de registro del servidor.

me sale que la lista esta null pero en la clase DB ya cargo los datos no se que error estoy cometiendo o a que se debe si me pueden ayudar muchas gracias de ante mano por su ayuda.

6 respuestas

Te sugiero que pruebes este codigo

public List getEmpresas() { if (listaEmpresas == null) { listaEmpresas = new ArrayList(); Empresa empresa = new Empresa(); empresa.setNombre("alura"); Empresa empresa2 = new Empresa(); empresa2.setNombre("HBO"); listaEmpresas.add(empresa); listaEmpresas.add(empresa2); } return listaEmpresas; }

Parece ser que el problema es que la lista de empresas no se está inicializando correctamente en la clase DB. una alternativa sera que la lista de empresas se inicialice antes de enviarla al archivo JSP.

Gracias por tu ayuda compañero pero ya realice de las dos formas que sugeriste y no funciono

public class ListaEmpresasServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {        

        List<Empresa> listaEmpresas = new ArrayList<>();
        Empresa empresa = new Empresa();
        empresa.setNombre("Alura");
        Empresa empresa2 = new Empresa();
        empresa2.setNombre("Caelum");
        listaEmpresas.add(empresa);
        listaEmpresas.add(empresa2);

        //DB baseDeDatos = new DB();    
    //    List<Empresa> listaEmpresas = baseDeDatos.getEmpresas();
        request.setAttribute("lstempresas", listaEmpresas);
        RequestDispatcher rd = request.getRequestDispatcher("/listaEmpresas.jsp");
        rd.forward(request, response);            
    }
}

si me equivoque en algo al inicializar corríjanme por favor tambien realice de la siguiente forma que sugeriste

public List<Empresa> getEmpresas() { 
         if (listaEmpresas == null) { listaEmpresas = new ArrayList();
         Empresa empresa = new Empresa(); 
         empresa.setNombre("alura");
         Empresa empresa2 = new Empresa(); 
         empresa2.setNombre("HBO"); 
         listaEmpresas.add(empresa); 
         listaEmpresas.add(empresa2); } 
         return listaEmpresas;        
    }

clase ListaEmpresasServlet:

public class ListaEmpresasServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {        

        DB baseDeDatos = new DB();    
        List<Empresa> listaEmpresas = baseDeDatos.getEmpresas();
        request.setAttribute("lstempresas", listaEmpresas);
        RequestDispatcher rd = request.getRequestDispatcher("/listaEmpresas.jsp");
        rd.forward(request, response);            
    }
}

en el archivo jsp esta lo mismo para los dos casos:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@page import="java.util.List, com.alura.gerenciador.servlet.Empresa"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    Lista de empresas: <br />
    <ul>
        <%
            List<Empresa> lista = (List<Empresa>)request.getAttribute("lstempresas");
            for (Empresa empresa : lista) {
        %>
            <li><%= empresa.getNombre() %></li>
        <%
            }
        %>
    </ul>

</body>
</html>

si me equivoque en algo me lo hacen saber por favor.

Hola compañero tengo una solucion para ese problema y es que tinene que importar la clase de la base datos en el .jsp para que asi no salga el error.

<%@page import="com.alura.gerenciador.servlet.Empresa"%>
//AQUI IMPORTE LA BASE DE DATOS AL JSP
<%@page import="com.alura.gerenciador.servlet.DB"%>
<%@page import="java.util.List"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>LISTA EMPRESA</title>
</head>
<body>
    Lista de empresas
    <br />
    <ul>
        <%
        //AQUI CREE LA BASE DE DATOS COMO EN LA CLASE listaEmpresaServlet
        DB baseDeDatos = new DB();
        List<Empresa> list = baseDeDatos.getEmpresa();
        for (Empresa empresa : list) {  %>

        <li><%= empresa.getEmpresa() %> </li>
        <% 
        }
        %>


    </ul>
</body>
</html>

Y la clase de la base de datos la deje igual como se muestra en la leccion pero de todas maneras dejo el codigo para que te des una idea

public class DB {

    private static List<Empresa> listaEmpresa = new ArrayList<>();

    static {
        Empresa empresa1 = new Empresa();
        empresa1.setEmpresa("Microsoft");
        Empresa empresa2 = new Empresa();
        empresa2.setEmpresa("Sony");

        listaEmpresa.add(empresa1);
        listaEmpresa.add(empresa2);

    }

    public void agregarEmpresa(Empresa empresa) {
        DB.listaEmpresa.add(empresa);
    }

    public List<Empresa> getEmpresa() {
        return DB.listaEmpresa;
    }

}

Con esto yo solucione el problema de que la lista sea nula, espero que te ayude :)

Muchas gracias compañero si soluciono mi error, pero aun no entiendo porque me devuelve una lista Null cuando mi lista no esta null cuando aparentemente estoy enviando la lista de manera correcta a mi jsp como se muestra en los videos tal cual. Si alguien me ayuda con esa explicación muchas gracias. De nuevo gracias por la ayuda compañero.

Creo que solo debes poner http://localhost:8080/gerenciador/listaEmpresas sin el .jsp

a mi me aparece la lista solo si le agrego el .jsp, ni no se lo pongo me aparece el error 404 Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadAqui me muestra la lista cuando agrego el .jsp a la url Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad