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

Modificar, Eliminar datos de formulario a BD

Estas en el tema de Modificar, Eliminar datos de formulario a BD en el foro de Java en Foros del Web. Hola comunidad, escribo porque me he encontrado en una situacion algo engorrosa y no puedo solucionar este problema que se me presenta a la hora ...
  #1 (permalink)  
Antiguo 29/08/2007, 10:13
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 17 años
Puntos: 0
Modificar, Eliminar datos de formulario a BD

Hola comunidad, escribo porque me he encontrado en una situacion algo engorrosa y no puedo solucionar este problema que se me presenta a la hora de armar mi página.
La situación es esta, tengo un formulario que me muestra todos los regstros de mi base de datos, la cosa es que yo puse un checkbox y un radio para podes eliminar y modificar los regstros seleccionados respectivamente.
El problema o la incapaciadad que tengo es cómo hago para seleccionar dentro de todos los campos del registro los que exactamente están tildados (con el check) o el que está seleccionado con el radio. Aqui va el codigo de la JSP que hice.
Los accesos a las bases de datos me andan bien, m muestra todos los datos con el radio y check al lado, pero no se como armar los javascript para solucionar esto.
Si alguno tiene una solucion o algo parecido que haya hecho me haría el favor de facilitarmelo? MUCHISIMAS gracias-. Saludos


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Lista de Personas</title>
</head>
<body bgcolor="#FFFFCC">
<form>
<table cellpadding=2 cellspacing=2 border=1 width=100%>
<tr>
<td width=20%><b>Nombre</b></td>
<td width=20%><b>Apellido</b></td>
<td width=35%><b>Email</b></td>
<td width=25%><b>Telefono</b></td>
<td><b>Elimina</b></td>
<td><b>Modifica</b></td></tr>
<% Persona p = new Persona();
List lista = ListaPersonas.listaPersonas();
for (int i=0; i < lista.size(); i++){
p = (Persona) lista.get(i);
%><tr>
<td width=20%><%= p.getNombre() %></td>
<td width=20%><%= p.getApellido() %></td>
<td width=35%><%= p.getEmail() %></td>
<td width=25%><%= p.getTelefono() %></td>
<td align="center"><input type="checkbox"/></td>
<td align="center"><input type="radio" name="modificar"/></td></tr>

<% }
%>
<tr>
<td colspan=4 align="center"><input type="submit" value="Continuar" onsubmit="alert("lalala")"/></td>
<td colspan=1 align="center"><input type="button" value="Eliminar"
onClick="confirm('Quieres borrar los registros seleccionados?')"></td>
<td colspan=1 align="right"><input type="button" value="Modificar"
onClick="confirm('Quieres modificar el registro seleccionado?');"></td>
</tr>

<!-- TENDRÍA QUE MANDAR LOS DATOS A MODIFICAR EN UNA LISTA ARMADA POR UN JS
LOS DATOS PARA ELIMINAR VAN A IR DE A UNO ASI QUE MANDO EL ID O LA PERSONA
-->

</table>
</form>

</body>
</html>

Última edición por Payin; 29/08/2007 a las 10:38
  #2 (permalink)  
Antiguo 29/08/2007, 13:26
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Modificar, Eliminar datos de formulario a BD

Si lo tienes que mandar en JavaScript, será un problema más adecuado para el foro de JavaScript, creo yo.

De todas formas, a no ser que uses AJAX no veo por que hace falta el JavaScript.

S!
  #3 (permalink)  
Antiguo 29/08/2007, 13:43
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: Modificar, Eliminar datos de formulario a BD

yo lo que tengo hecho es que mediante funciones de javascript coger esos ids seleccionados y luego con un enlace mandarlos al action(es que uso struts)
  #4 (permalink)  
Antiguo 29/08/2007, 14:06
Avatar de jucardo  
Fecha de Ingreso: agosto-2007
Mensajes: 33
Antigüedad: 16 años, 8 meses
Puntos: 1
Re: Modificar, Eliminar datos de formulario a BD

Bueno a mi me paso lo mismo y lo solucione de la siguinte forma:

Este es tu codigo

for (int i=0; i < lista.size(); i++){
p = (Persona) lista.get(i);
%><tr>
<td width=20%><%= p.getNombre() %></td>
<td width=20%><%= p.getApellido() %></td>
<td width=35%><%= p.getEmail() %></td>
<td width=25%><%= p.getTelefono() %></td>
<td align="center"><input type="checkbox"/></td>
<td align="center"><input type="radio" name="modificar"/></td></tr>

<% }
%>
en la linea <td align="center"><input type="radio" name="modificar"/></td></tr>
en lugar de llamarla modificar llamala con el nombre clave del campo de la base de datos y seria algo como esto
<td align="center"><input type="radio" name="p.getNombre"/></td></tr>
suponiendo que el nombre fuera la clave en la base de datos.

espero te sirva de algo.
  #5 (permalink)  
Antiguo 29/08/2007, 14:37
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 17 años
Puntos: 0
Re: Modificar, Eliminar datos de formulario a BD

gracias a todos! estoy modificandolo en estos momentos, si bien era un diseño preliminar quería saber masomenos como lo hacía la gran masa o como se les ocurriría.
Cris_maco tambien uso strus (aunque no muy bien :P) y ahroa estoy haciendolo con struts, es un poco mas sencillo. Después cuando ande (o me tire menos errores) cuelgo el código para que lo vea o para futuras sacadas de dudas de los nw como yo.
Gracias juanca y green por sus respuestas, si bien lo de juanca no era justo para esto, me ayudó en otro formulario.
  #6 (permalink)  
Antiguo 29/08/2007, 21:03
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 17 años
Puntos: 0
Re: Modificar, Eliminar datos de formulario a BD

Aqui va el codigo (con struts) que me anda.


<html:html>
<head>
<title>Lista de Personas</title>
</head>
<body>
<html:form action="/EliminarPersona" method="post">
<table cellpadding=2 cellspacing=2 border=1 width=100%>
<tr>
<td width=20%><b>Nombre</b></td>
<td width=20%><b>Apellido</b></td>
<td width=35%><b>Email</b></td>
<td width=25%><b>Telefono</b></td>
<td><b>Elimina</b></td>
</tr>
<%
Persona p = new Persona();
List lista = ListaPersonas.listaPersonas();
for (int i = 0; i < lista.size(); i++) {
p = (Persona) lista.get(i);
%>
<tr>
<td width=20%><%=p.getNombre()%></td>
<td width=20%><%=p.getApellido()%></td>
<td width=35%><%=p.getEmail()%></td>
<td width=25%><%=p.getTelefono()%></td>
<td><html:checkbox property="available"
name="<%="eliminar"+ i %>" />
<html:hidden property="do"
name="<%="id"+ i %>" value="<% p.getIdPersona(); %>" />
</tr>
<%
}
%>
<tr>
<td colspan=5 align="center"><html:submit>Eliminar</html:submit>
</tr>

</table>
</html:form>

</body>
</html:html>


sin bie nahroa tengo problemas con la persistencia (uso Hibernate), el jsp sin struts me andaba perfecto, ahroa me tira problemas al conectarse a la BD para armar la tabla con el listapersonas().
Después atualizo los problemas que tengo, primeramente voy a ver si los resuelvo solo, tampoco es ser vago y no probar por sí mismo.
Gracias de nuevo a todos!

Última edición por Payin; 29/08/2007 a las 21:04 Razón: Post incompleto
  #7 (permalink)  
Antiguo 30/08/2007, 04:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Modificar, Eliminar datos de formulario a BD

Umm, no se lo que genera el Struts con el html:hidden, pero si es lo que parece (un campo hidden con el nombre que le das y el valor que le pasas) ¿No te estara enviando siempre todos los ids de todas las personas?

Lo habitual es tener un checkbox por persona, todos con el mismo nombre pero distinto valor. Así es como se pasa un parametro con multiples valores y para recibirlo, lees el parametro y te devuelve un array de String con los valores de los checkboxes que han sido marcados. Los que no han sido marcados no los envia.

S!
  #8 (permalink)  
Antiguo 31/08/2007, 12:29
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 17 años
Puntos: 0
Re: Modificar, Eliminar datos de formulario a BD

Eso no lo sabía Green, yo en estos momentos estoy enviando, como bien dices tú todos lso datos y despues en el servlet los desgloso. Sería muy bueno solo envíar los que a mi me gustaría.
Si bien entiendo lo que me dices no lo llego a graficar en mi cabeza. No me darías un pequeño ejemplo?


Muchas gracias!
  #9 (permalink)  
Antiguo 31/08/2007, 13:32
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Modificar, Eliminar datos de formulario a BD

El HTML que has de generar es
<checkbox name="p_a_eliminar" value="id1" />
...
<checkbox name="p_a_eliminar" value="id2" />
...
<checkbox name="p_a_eliminar" value="id3" />

y luego en el servlet (no se como será en Struts) haces un request.getParameterValues("p_a_eliminar") y esto te devolvera un array de Strings con los idX cuyo checkbox haya sido marcado.

La clave está en que el parametro tenga siempre el mismo nombre y distinto valor.

S!
  #10 (permalink)  
Antiguo 31/08/2007, 20:35
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 17 años
Puntos: 0
Re: Modificar, Eliminar datos de formulario a BD

esta bien, ahi entendí lo que me querías decir. Si, lo estaba haciendo (sin struts) de una forma arecida a lo que me decís vos. Solo que dentro del servlet voy pasando por todos los parametros del request busando los que tienen IDX en ON. Estos son lso códigos que me andan, pero que quiero pasar a struts (hasta ahora ha sido un dolor de cabezas y errores por todos lados).
Estos son los codigos:

DE LA JSP

<html>
<head>
<title>Lista de Personas</title>
</head>
<form name="envio" method="post">
<table cellpadding=2 cellspacing=2 border=1 width=100%>
<tr>
<td width=20%><b>Nombre</b></td>
<td width=20%><b>Apellido</b></td>
<td width=35%><b>Email</b></td>
<td width=25%><b>Telefono</b></td>
<td><b>Elimina</b></td>
<td><b>Modifica</b></td>
</tr>
<%
Persona p = new Persona();
List lista = ListaPersonas.listaPersonas();
for (int i = 0; i < lista.size(); i++) {
p = (Persona) lista.get(i);
%>
<tr>
<td width=20%><%=p.getNombre()%></td>
<td width=20%><%=p.getApellido()%></td>
<td width=35%><%=p.getEmail()%></td>
<td width=25%><%=p.getTelefono()%></td>
<td align="center">
<input type="checkbox" name="eliminar<% i %>"/>
<input type="hiden" name="valor<% i %>" value="<% p.getID %>"/>
</td>
</tr>
<%
}
%>
<tr><p></p></tr><tr>
<td colspan=6 align="center">
<input type="submit"
value="Continuar""/>
<input type="hiden" name="cantidad" value="<% i %>" />
</td>
</tr>
</table>
</form>
</body>
</html>

DEL SERVLET


protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
int cant = Integer.parseInt(request.getParameter("cantidad")) ;
Session sesion = FactorySingleton.getInstance().openSession();
Transaction tx = sesion.beginTransaction();
for (int i = 0; i < cant; i++) {
if (request.getParameter("eliminar" + i) != null) {
Persona p = (Persona) sesion.load(Persona.class, Integer
.parseInt(request.getParameter("id" + i)));
sesion.delete(p);
}
}
tx.commit();
sesion.close();
}

La variable CANT la utilizo para saber cuantos elementos paso. No sé si hay otra forma un poco mas óptima.

saludos!
  #11 (permalink)  
Antiguo 01/09/2007, 03:30
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: Modificar, Eliminar datos de formulario a BD

Yo creo que lo que te dice Greeneyed es una forma bastante fácil de hacerlo, te pongo como lo hago yo con Struts:

<input type="checkbox" id="check" value="<bean:write name="ingreso" property="numIng"/>" name="numIng"/>

en el action:

String elementos[]=request.getParameterValues("numIng");

y como bien dijo Greeneyed al hacer el request solo coges los checkbox que estan marcados y si quieres saber cuántos son pues haces: elementos.length()

en tu caso en vez del bean:write que yo tengo pondrias <% p.getID %>, es que no se porque no aprovechas el checkbox, en vez de pasarlos ocultos.

Espero que me haya explicado bien, es que creo que asi es más fñacil que como tu lo haces, pero si te funciona bien, no tienes porque cambiar...
  #12 (permalink)  
Antiguo 01/09/2007, 12:51
Avatar de Payin  
Fecha de Ingreso: mayo-2007
Mensajes: 92
Antigüedad: 17 años
Puntos: 0
Re: Modificar, Eliminar datos de formulario a BD

gracias! gracias! ahi entendi. SI, evidentemente es MUCHO mas facil así. Gracias a los dos!
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 16:36.