Foros del Web » Programación para mayores de 30 ;) » Java »

carrito no recoge productos

Estas en el tema de carrito no recoge productos en el foro de Java en Foros del Web. Hola Estoy realizando un carrito de la compra en jsp y me está dando problemas a la hora de recoger los artículos y pasarlos al ...
  #1 (permalink)  
Antiguo 09/05/2013, 04:35
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta carrito no recoge productos

Hola

Estoy realizando un carrito de la compra en jsp y me está dando problemas a la hora de recoger los artículos y pasarlos al carrito de la compra.
Visualizo todos los artículos mediante un bucle, cada artículo tiene su propio botón de comprar, pasamos a la pagina que supuestamente lo incluye en el carrito pero siempre me coge únicamente el primer artículo, no sé como decirle que coja únicamente el que corresponda al botón de "comprar" que he seleccionado.
Por otra parte, si utilizo textbox y los selecciono, entonces si que me coge el producto que haya seleccionado, pero no me coge las cantidades, estoy un poco perdida.
Me gustaría saber cómo indicarle cuáles datos tiene que coger, sólo los del botón de comprar a los que corresponda.
Os pongo el código principal del carrito:

Para consultar los artículos:

<p>Bienvenido&nbsp;<%=sesion1.getAttribute("usuari o") %></p>

<form name="formulario" method="get" action="alCarrito.jsp">

<%



Collection lista = datos.consultarArt();
if (lista != null)
{
if (lista.size () > 0)
{
for (Iterator i = lista.iterator(); i.hasNext(); )
{
Articulo art = (Articulo) i.next ();

%>
<li>Id: <input type=checkbox name="Id" value=<%= art.getId_art () %>></li>
<li> <%= art.getSeccion () %></li>
<li> <%= art.getNombre () %></li>
<li> <%= art.getDescripcion () %></li>
<li>Precio: <input type=checkbox name="Precio" value=<%= art.getPrecio () %>></li>
<li> <%= art.getImagen () %></li>

<table border="1">
<tr>
<td align="center">Cantidad</td>
<td colspan="2">
<select name="Cantidad">
<option value="0" selected="selected">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
</td>
</tr>
</table>
<input type="Submit" name="Comprar" value="Comprar"/><br />

<br><a>--------------------------------</a>

<%

}
}
}
%>
</form>



Y esta otra página supuestamente recoge los artículos seleccionados y de momento con que me los visualice me conformo, cuando consiga eso ya pasaremos a guardarlos en una variable de sesión: (por cierto, puede haber más de una variable de sesión con el mismo nombre? por ejemplo, puedo tener varios "detallepedido"????)


<%

datos.conectar();
Integer id;
double precio;
Integer cantidad;

HttpSession sesion1 = request.getSession();

id=Integer.parseInt(request.getParameter("Id"));
precio=Double.parseDouble (request.getParameter("Precio"));
cantidad=Integer.parseInt(request.getParameter("Ca ntidad"));

Articulo(id,seccion,nombre,descripcion,precio,imag en));

%><p>El id es: <%=id %>El precio es:<%=precio %>y la cantidad<%=cantidad %></p>

</body>
</html>


Muchas gracias
  #2 (permalink)  
Antiguo 09/05/2013, 05:18
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: carrito no recoge productos

estarás recuperando solo los ids del articulo pero no los precios :|

Tendrás que hacerlos dependientes de alguna forma estilo name="id_index" donde index será un autoincremental, y en el precio tener algo similar name="precio_index".

En cuanto a los atributos de sesion, no puedes tener dos atributos diferentes bajo el mismo nombre, pero puedes tener un atributo de sesión detallepedidos que sea un ArrayList de Strings e ir añadiendo esos detalleapellido individuales al listado.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 09/05/2013, 05:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: carrito no recoge productos

Gracias por la respuesta Fuzzylog. Lo de detallepedido creo que lo he entendido, otra cosa es que lo sepa hacer.

Pero lo otro que me comentas no lo he entendido. ¿Porqué dices que no estoy recuperando los precios? Se supone que hago el mismo proceso para el id, el precio y la cantidad.

Y lo de los autoincrementales tampoco lo he entendido. Los artículos están en una base de datos oracle, así que no puedo poner campos autoincrement. Y no sé como relacionar el botón de comprar con los datos del artículo concreto al que pertenece. Si hubiera alguna manera de indicárselo para que cuando recojo los datos con request.getParameter me cogiera sólo los datos del botón comprar que se ha pulsado, esa sería la idea.

Mil gracias
  #4 (permalink)  
Antiguo 09/05/2013, 05:55
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: carrito no recoge productos

Si estás diciendo que es art.getPrecio() lo que no obtiene ningun valor será que lo pierdes antes, y necesitaría ver el código de obtención del precio para ver como lo estás metiendo en el artículo desde BD.

Los autoincrementales son para relacionar en la jsp el articulo con el precio. Tu ahi generas dos conjuntos de inputs diferentes, uno con el id de cada articulo y otro con el precio. A la hora de recuperar los datos de la jsp para enviarlos de nuevo tienes que pillar los parámetros por separado de forma que tendrías que implementar una forma de saber qué precio corresponde a cada artículo.

Este sería un caso similar al que me describes:

http://www.forosdelweb.com/f45/formu...-java-1049475/
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 09/05/2013, 09:48
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: carrito no recoge productos

Gracias por responder.

He estado mirando el ejemplo y conseguí unir el id del producto con el artículo, pero siempre me coge el id y la cantidad del primer artículo.

El precio sí que me lo muestra, me muestra el id, el precio y la cantidad pero sólo del primer artículo. Si quiero que me lo muestre de otro, por alguna extraña razón, tengo que poner un checkbox en el id y precio, y entonces sí que me recoge el artículo que sea, aunque no sea el primero, pero siempre la cantidad del primero.

Estoy agobiadísima, no consigo que funcione, no tengo mucha experiencia con jsp y estoy perdida. Si conoces alguna otra forma de hacer el carrito y me puedes indicar algo no me importa cambiarlo y hacerlo de otra manera que funcione.

O si se pudiera como en php, en el action pasarle algunos parámetros para que pudiera recogerlos la otra página, no sé, es por darle vueltas.

Gracias
  #6 (permalink)  
Antiguo 09/05/2013, 09:51
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: carrito no recoge productos

"He estado mirando el ejemplo y conseguí unir el id del producto con el artículo, pero siempre me coge el id y la cantidad del primer artículo."

¿Como has montado todo el codigo para ese caso? Me gustaría verlo

Cuantos productos tienes? que valores de ID y cantidad tienen? etc.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #7 (permalink)  
Antiguo 09/05/2013, 12:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: carrito no recoge productos

Pues tengo la página consultarArticulos.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.util.*,paquetes.*" session="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Consultar artículos</title>
</head>
<body>
<jsp:useBean id="datos" scope="session" class="paquetes.AccederBd" />
<jsp:useBean id="datosTabla" scope="session" class="paquetes.Articulo" />

<%
datos.conectar();
HttpSession sesion1=request.getSession();
%>

<p>Bienvenido&nbsp;<%=sesion1.getAttribute("usuari o") %></p>

<form name="formulario" method="get" action="alCarrito.jsp">

<%
Collection lista = datos.consultarArt();
if (lista != null)
{
if (lista.size () > 0)
{
for (Iterator i = lista.iterator(); i.hasNext(); )
{
Articulo art = (Articulo) i.next ();

%>
<li>Id: <input type="text" name="Id" value=<%= art.getId_art () %>><%= art.getId_art () %></li>
<li> <%= art.getSeccion () %></li>
<li> <%= art.getNombre () %></li>
<li> <%= art.getDescripcion () %></li>
<li>Precio: <input type="text" name="Precio" value=<%= art.getPrecio () %>><%= art.getPrecio () %></li>
<li> <%= art.getImagen () %></li>

<table border="1">
<tr>
<td align="center">Cantidad</td>
<td colspan="2">
<select name="Cantidad">

<option value="('<%=art.getId_art() + "0"%>');" selected="selected">0</option>
<option value="('<%=art.getId_art() + "1"%>');">1</option>
<option value="('<%=art.getId_art() + "2"%>');">2</option>
</select>
</td>
</tr>
</table>
<input type="Submit" name="Comprar" value="Comprar"/><br />

<br><a>--------------------------------</a>

<%

}
}
}
%>
</form></body></html>


Luego está la página alCarrito.jsp, que es a la que se llega a través del action del formulario:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" session="true" import="java.util.*,paquetes.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<%@ page import="paquetes.Articulo"%>
<%@ page import="paquetes.AccederBd"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="datos" scope="session" class="paquetes.AccederBd" />

<%
datos.conectar();
Integer id;
double precio;
String cantidad;

HttpSession sesion1 = request.getSession();

id=Integer.parseInt(request.getParameter("Id"));
precio=Double.parseDouble (request.getParameter("Precio"));
cantidad=request.getParameter("Cantidad");

%><p>El id es: <%=id %>El precio es:<%=precio %>y la cantidad<%=cantidad %></p>

</body>
</html>

Tengo también el bean de Articulo, aparte de los de conexión y otros más, el de artículo es:

public class Articulo {
Integer id_art;
String seccion;
String nombre;
String descripcion;
double precio;
String imagen;

Que es igual que la tabla de la base de datos, que la tengo con oracle.

Al poner en la página consultarArticulos.jsp "<option value="('<%=art.getId_art() + "0"%>');" me une el id del artículo con la cantidad, pero sólo me lo hace para el primer artículo.

Yo la verdad que si te ocurre otra forma de hacerlo mejor o más fácil, yo la verdad me siento totalmente perdida, ojalá puedas arrojar algo de luz.

Millones de gracias

Se me olvidaba, en la base de datos la tabla Articulo:

ID_ART NUMBER No - 1
SECCION VARCHAR2(4000) Yes - -
NOMBRE VARCHAR2(4000) Yes - -
DESCRIPCION VARCHAR2(4000) Yes - -
PRECIO NUMBER Yes - -
IMAGEN VARCHAR2(4000) Yes - -
1 - 6

Y los datos:

1 fotografia camara canon ios 365CH cámara reflex con 38 aumentos 359 -
21 informatica Portátil ASUS 35GRJH25 Tecnología Intel i7, 6GB RAM, 2Tb disco duro, tarjeta gráfica Intel Core Graphics 599 -

Sólo tengo metidos dos registros, para probar, el primer valor es el id y es muy gracioso porque debe ser que anduve haciendo algunas pruebas y no me guardaba bien los registros y pasamos del id 1 al 21!!! Por otr aparte el campo imagen aparece vacío porque ahí quería meter la ruta de la imagen para no sobrecargar la bbdd, sólo que tuviera la ruta, pero tampoco sé cómo se hace, donde hay que dejar las imágenes para que las pueda coger y eso.

Última edición por soymari; 09/05/2013 a las 12:15
  #8 (permalink)  
Antiguo 10/05/2013, 01:43
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: carrito no recoge productos

No metas tantas preguntas juntas, soluciona uno o dos temas y luego pregunta por separado en otro mensaje otra cosa poniendo el enlace a este post.

A ver, verifica primero que la consulta te está devolviendo los artículos correctamentes imprimiendo por pantalla con un System.out el valor de lista.size().

Por otra parte, lo que veo ahi es que para cada articulo de la lista te va a hacer todo esto:

<li>Id: <input type="text" name="Id" value=<%= art.getId_art () %>><%= art.getId_art () %></li>
<li> <%= art.getSeccion () %></li>
<li> <%= art.getNombre () %></li>
<li> <%= art.getDescripcion () %></li>
<li>Precio: <input type="text" name="Precio" value=<%= art.getPrecio () %>><%= art.getPrecio () %></li>
<li> <%= art.getImagen () %></li>

<table border="1">
<tr>
<td align="center">Cantidad</td>
<td colspan="2">
<select name="Cantidad">

<option value="('<%=art.getId_art() + "0"%>');" selected="selected">0</option>
<option value="('<%=art.getId_art() + "1"%>');">1</option>
<option value="('<%=art.getId_art() + "2"%>');">2</option>
</select>
</td>
</tr>
</table>
<input type="Submit" name="Comprar" value="Comprar"/><br />

<br><a>--------------------------------</a>

Lo del select de la cantidad no lo entiendo, ¿Por que usas el id del artículo y le acoplas un 0,1 o 2? Si el articulo tiene id 1 los value de esos options seran 10,11 y 12 (y no creo que te valgan para nada la verdad.

Por otra parte <input type="Submit" name="Comprar" value="Comprar"/><br /> va a hacer que se te envíe el form automáticamente al pulsarlo a menos que le escribas onclick="return false;". Si quieres evitar esos problemas usa input type="button".

A lo que me referia es a que tengas un incremental de tipo int que valga 0 para la primera iteración y a medida que hay más artículos se vaya incrementando (incremental++ al final del bucle for) y que escribas los names de los inputs así name="Id_<%=incremental%>" , name="Precio_<%=incremental%>", etc... de forma que queden referencias únicas para que puedas recuperarlo correctamente.

Si asocias ese incremental al botón de compra puedes seleccionar todos los datos a partir de los names relacionados con ese incemental.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #9 (permalink)  
Antiguo 10/05/2013, 06:29
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: carrito no recoge productos

Lo primero, gracias por tu inestimable ayuda.

Te comento los cambios que he hecho. En el archivo consultarArticulos.jsp:

Integer increment=0;

for (Iterator i = lista.iterator(); i.hasNext(); )
{
Articulo art = (Articulo) i.next ();
%>
<input type="text" name="prueba" value=<%=increment%>>
<li>Id: <input type="text" name="Id_<%=increment%>" value=<%= art.getId_art () %>><%= art.getId_art () %></li>
<li> <%= art.getSeccion () %></li>
<li> <%= art.getNombre () %></li>
<li> <%= art.getDescripcion () %></li>
<li>Precio: <input type="text" name="Precio_<%=increment%>" value=<%= art.getPrecio () %>><%= art.getPrecio () %></li>
<li> <%= art.getImagen () %></li>

<table border="1">
<tr>
<td align="center">Cantidad</td>
<td colspan="2">
<select name="Cantidad_<%=increment%>">

<option value=0 selected="selected">0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
</td>
</tr>
</table>
<input type="Submit" name="Comprar" value=<%=increment%>/><br />

<br><a>--------------------------------</a>

<%
increment++;
}


Y en el archivo alCarrito.jsp:

datos.conectar();
String id;
String precio;
String cantidad;
Integer inc;

HttpSession sesion1 = request.getSession();

inc=Integer.parseInt(request.getParameter("prueba" ));
id=request.getParameter("Id_"+inc);
precio=request.getParameter("Precio_"+inc);
cantidad=request.getParameter("Cantidad_"+inc);

%><p>El id es: <%=id %>. El precio es: <%=precio %>. y la cantidad: <%=cantidad %>
El valor del incremental es: <%=request.getParameter("Comprar")%>.</p>

Verás que he puesto el valor del incremental en el value del Submit, son cosas raras mías sólo para comprobar los valores que va cogiendo.

Ahora he conseguido que me lea el primer producto, me dice bien todos los valores con los nombres del estilo "Id_incremental" que tu me comentabas. El problema es que no sé como hacer para asociar el valor del incremental con el botón de comprar, para que cuando hago un request.getParameter en alCarrito.jsp me coja sólo los datos de ese producto, y no del primero, como siempre.
Vamos, que no sé enlazar el botón de compra con el incremental
  #10 (permalink)  
Antiguo 11/05/2013, 11:34
 
Fecha de Ingreso: septiembre-2010
Mensajes: 67
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: carrito no recoge productos

Ya conseguí recibir bien el id correspondiente al botón "Comprar pulsado":

Código:
<input id="boton" name="boton" type="hidden" value="null">
			<INPUT TYPE="IMAGE" NAME="ELIMINAR " ONCLICK="document.getElementById('boton').value='<%=increment%>' ;this.form.submit();" >
Ahora a ver si soy capaz de meter las cosas en las variables de sesión, luego mostrarlas y luego guardarlas en la bbdd, así que ahí sigo, seguro que tengo más dudas y te daré la vara, pero muchísimas gracias por toda tu ayuda para llegar hasta aquí

Etiquetas: jsp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:24.