Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Yager2222 en 21 Mayo 2020, 17:48 pm



Título: AYUDA (JAVA): ERROR Double.parseDouble
Publicado por: Yager2222 en 21 Mayo 2020, 17:48 pm
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:

Código:
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

Código:
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

Código:
<%@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


Título: Re: AYUDA (JAVA): ERROR Double.parseDouble
Publicado por: 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.


Título: Re: AYUDA (JAVA): ERROR Double.parseDouble
Publicado por: Yager2222 en 21 Mayo 2020, 19:23 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


Título: Re: AYUDA (JAVA): ERROR Double.parseDouble
Publicado por: 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
  1.   String titulo = request.getParameter("titulo");
  2.   String autor = request.getParameter("autor");
  3.   String precio = request.getParameter("precio");
  4.  
  5.   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


Título: Re: AYUDA (JAVA): ERROR Double.parseDouble
Publicado por: rub'n en 21 Mayo 2020, 20:02 pm
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.


Título: Re: AYUDA (JAVA): ERROR Double.parseDouble
Publicado por: Yager2222 en 22 Mayo 2020, 13:04 pm
Muchísimas gracias. Tenía un método a parte que me estaba dando fallos, pero llevabas toda la razón

<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
  1.   String titulo = request.getParameter("titulo");
  2.   String autor = request.getParameter("autor");
  3.   String precio = request.getParameter("precio");
  4.  
  5.   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