AYUDA (JAVA): ERROR Double.parseDouble

Iniciado por Yager2222, 21 Mayo 2020, 17:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Yager2222

Buenas amigos del foro, estoy teniendo problemas con el proyecto adjunto:

La primera tabla si que se me genera con el título, autor y precio. El fallo me da al querer recuperar los libros en los que seleccioné la opción comprar en una segunda tabla, y me da el siguiente error:


Estado HTTP 500 – Internal Server Error


Tipo Informe de Excepción

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

excepción
java.lang.NullPointerException
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)
sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
java.lang.Double.parseDouble(Double.java:538)
modelo.GestionVentas.service(GestionVentas.java:39)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


nota La traza completa de la causa de este error se encuentra en los archivos de registro del servidor.





GestionVentas.java

package modelo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import beans.Libro;

@WebServlet("/GestionVentas")
public class GestionVentas extends HttpServlet {
private static final long serialVersionUID = 1L;

    public GestionVentas() {
        super();
    }

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

List<Libro> lista = null;
HttpSession misesion = request.getSession();
lista= (ArrayList<Libro>)misesion.getAttribute("lista");
if (lista == null)
lista= new ArrayList<Libro>();
switch(request.getParameter("opcion")) {

case "comprar":
String titulo = request.getParameter("titulo");
String autor = request.getParameter("autor");
String precio = request.getParameter("precio");

double e = Double.parseDouble(precio);

Libro l = new Libro(titulo, autor, e);
lista.add(l);
misesion.setAttribute("lista", lista);
request.getRequestDispatcher("libros.jsp").forward(request, response);
break;


case "eliminar":
lista.remove(Integer.parseInt(request.getParameter("id")));
misesion.setAttribute("lista", lista);
request.getRequestDispatcher("libros.jsp").forward(request, response);

break;

}
}
}

---------------------------
libros.jsp


<%@page import="beans.Libro"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML>
<html>
<head>
<title>libros</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>   
<h1>Listado de libros</h1>

<table border="1">
    <tr><th></th><th>Titulo</th><th>Autor</th><th>Precio</th></tr>
        <c:forEach items="${requestScope.libros}" var="libro" varStatus="i">
<tr>
<td><a href="GestionVentas?opcion=comprar&id=${i.index}">
              <input type="submit" value="Comprar"/></a></td>
<td>${libro.titulo}</td>
<td>${libro.autor}</td>
<td>${libro.precio}</td>
</tr>
</c:forEach>
</table>
<br/><br/>
<br/><br/>
<table border=1 cellspacing=1 cellpadding=7 bordercolor="black">
<tr><th></th><th>Titulo</th><th>Autor</th><th>Precio</th></tr>
<c:forEach items="${sessionScope.lista}" var="libro2" varStatus="i">

<tr>
<td><a href="GestionVentas?opcion=eliminar&id=${i.index}">
              <input type="submit" value="eliminar"/></a></td>
<td><c:out value="${libro2.titulo}"></c:out></td>
<td><c:out value="${libro2.autor}"></c:out></td>
<td><c:out value="${libro2.precio}"></c:out></td>
</tr>
</c:forEach>
</table>

<a href="Controller?op=doTemas">Otro tema</a>
<br/><br/>
</body>
</html>


Saludos

EdePC

Saludos,

- No soy experto en Java pero se me ocurre que puedes poner un BreackPoint u otro método para ver que es lo que realmente trae ese: String precio = request.getParameter("precio");, no vaya ha ser que tenga algún símbolo de Moneda o use coma en lugar de punto.

Yager2222

Cita de: EdePC en 21 Mayo 2020, 18:11 PM
Saludos,

- No soy experto en Java pero se me ocurre que puedes poner un BreackPoint u otro método para ver que es lo que realmente trae ese: String precio = request.getParameter("precio");, no vaya ha ser que tenga algún símbolo de Moneda o use coma en lugar de punto.

Gracias por la ayuda.

Respecto al valor, está bien, porque son cogidos de una bbdd. Pero he visto que el problema lo tengo al pasar los datos en el "switch" con "comprar", que no pasa ninguno. Tendré que seguir buscando ahí el fallo.

Saludos

EdePC

<td><a href="GestionVentas?opcion=comprar&id=${i.index}"> ahí solo estás enviando el parámetro comprar mas no titulo, autor y precio. Como tienes el ID puedes consultarlo en la base de datos para obtener titulo, autor y precio.

- Aunque no sé porque haces:

Código (java) [Seleccionar]
   String titulo = request.getParameter("titulo");
   String autor = request.getParameter("autor");
   String precio = request.getParameter("precio");
   
   double e = Double.parseDouble(precio);


-- Si no los vas a utilizar luego ... si los vas a utilizar, como te dije puedes consultarlo en la Base de Datos por medio del ID

rub'n

#4
Usas algun framework no ? estas obligado a usarlo ? Vaadin le da milllllll patadas a eso. y no porque te sientas insultado sino que a veces nos hacen perder el tiempo, habiendo tecnología muyy superior.  >:D

:-\

EdePC si puedes mueve este post al foro de java.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

Yager2222

Muchísimas gracias. Tenía un método a parte que me estaba dando fallos, pero llevabas toda la razón

Cita de: EdePC en 21 Mayo 2020, 19:41 PM
<td><a href="GestionVentas?opcion=comprar&id=${i.index}"> ahí solo estás enviando el parámetro comprar mas no titulo, autor y precio. Como tienes el ID puedes consultarlo en la base de datos para obtener titulo, autor y precio.

- Aunque no sé porque haces:

Código (java) [Seleccionar]
   String titulo = request.getParameter("titulo");
   String autor = request.getParameter("autor");
   String precio = request.getParameter("precio");
   
   double e = Double.parseDouble(precio);


-- Si no los vas a utilizar luego ... si los vas a utilizar, como te dije puedes consultarlo en la Base de Datos por medio del ID