ventana emergente que abre otra

jaamdn
24 de Mayo del 2005
Hola compañeros, tengo un problemilla, tengo un jsp que abre otra pagina jsp de forma modal mediante window.showModalDialog, el problema viene cuando envio el formulario de la jsp de esta pagina, me abre siempre otra ventana nueva, y lo que quiero es que me envie el formulario, se cierre y la respuesta me la refresque en la primera ventana

Jorge
24 de Mayo del 2005
Son varias cuestiones.


*Que tras enviar el formulario se te abre una nueva ventana:
Posiblemente tienes mal establecido el atributo target del formulario.


*Que la ventana modal se cierre:
Para que la ventana modal se cierre tras el envio del formulario tendras que usar el metodo "close()" del objeto "window". Invocalo tras el submit del formulario.


*Que la respuesta te la refresque en la primera ventana:

-Esto ya depende. Y no es tan facil dar una solucion sin conocer mejor el codigo de tu aplicacion. Si esta ventana llamante tiene un nombre, seria tan facil como emplear ese identificador en el atributo target del formulario de la ventana modal.

-Si no es ese el caso, pero simplemente se trata de recargar el contenido de la pagina llamante con la misma url, pon una llamada al metodo reload del objeto location inmediatamente detras de la llamada a showModalDialog. Como la ventana emergente es modal, esa linea no se ejecutara hasta que se cierre la ventana emergente.

-Otra posibilidad, si la actualizacion a realizar en la ventana llamante es muy pequeña (el valor de algun campo de formulario, cambio de un texto, o algo similar), puedes intentar hacerlo mediante dhtml. Coloca el codigo necesario a continuacion de la llamada a showModalDialog, como ya dije antes ese codigo no se ejecuta hasta que la ventana modal no se cierra. La ventana modal puede proporcionar toda la informacion a actualizar a traves de un objeto asignado a su propiedad returnValue, asi que no hay limite a la complejidad de esta.
-Una ultima posibilidad, si la comunicacion debe ser sincronizada (porque la ventana llamante no debe actualizarse hasta que el proceso lanzado por submit desde la ventana emergente no haya finalizado, por ejemplo), es aun mas liosa. Tienes que combinar todo lo dicho antes con un iframe oculto en la ventana emergente que aguarda la respuesta del proceso, y cuando la recibe dispara el cierre de esta y la actualizacion de la ventana llamante.


Ya se que he soltado un buen rollo de explicacion. Pero es que la cuestion que tu planteabas tampoco era sencilla. Si se ha entendido algo, me conformo.



jaamdn
24 de Mayo del 2005
gracias jorge,

te cuento un poco mas el problema, tengo un jsp con un formulario, este jsp llama a otro que abre la ventana emergente ( es una ventana con un aceptar o un cancelar), la ventana emergente a un servlet que llama otra vez a la primera ventana ya con los datos actualizados, el problema es que me abre otra ventana y me salen dos ventanas, la primera y la nueva, le he dado mil vueltas pero tiene que haber algo que se me escapa.


un saludo y gracias

Jorge
24 de Mayo del 2005
Ah, vale, ahora creo que te he entendido.

O sea, en total tenemos tres ventanas, dos normales y una "emergente".
Diferenciemos entre ventanas y paginas. Ventana es donde se ven las paginas, y su numero no tiene por que coincidir¿ok?
Entiendo que tu tienes tres paginas que se te estan mostrando en tres ventanas, y tu solo quieres dos ventanas, una modal, de tal forma que al cerrarse la ventana modal solo quede la primera.
Lo que no me queda claro es, perdona, cuando se te abre la ventana "indeseada". ¿Al cargar el segundo jsp? ¿O cuando desde la ventana emergente se llama al servlet?

Vamos a ponerles nombres para aclararnos. Dime si la situacion que describo es lo que te esta ocurriendo.

*JSP1. Pagina inicial. Ante un accion del usuario (supongo) llama a otro jsp (el 2º).
*JSP2. Pagina intermedia. Se abre en otra ventana normal al ser llamado desde el JSP1. (¿Esto es lo que quieres o esta segunda ventana ya no deberia haberse abierto?). Ante una accion del usuario (supongo) crea una ventana emergente modal (la 3ª) y carga en ella un determinado contenido (supondre que resultado de un jsp, no importaria si fuese un servlet tradicional, o un contenido estatico).
*JSP3. Pagina final. Es cargada por la JSP2 en una ventana modal. Desde ella se invoca un servlet que actualiza unos datos. Los datos actualizados deberian mostrarse en la primera ventana. ¿La JSP1 con los datos actualizados se obtiene con la llamada a un nuevo servlet o es directamente la salida del servlet que actualiza los datos?

jaamdn
24 de Mayo del 2005
primero gracias por el interes

me explico un poco mejor

tengo una pagina jsp (JSP1) que abre la ventana modal
,la ventana modal (JSP2) llama a un servlet que actualiza la primera ventana (JSP1), pero en vez de refrescarme esa ventana (JSP1), me abre otra

Jorge
24 de Mayo del 2005
Bien. Creo que ya me hago la idea de cual es la situacion.

Las ventanas modales son nuevas para mi. No hace ni quince dias que descubri que existian, asi que es posible que tengan algun comportamiento extraño que desconozco.
Pero si se comportan como cualquier otra ventana del navegador (salvo que pueden ser modales, y tal) lo que te voy a proponer deberia funcionar. Pero no lo he probado, que conste.


En la JSP1 (ventana llamante) tendras el siguiente codigo JavaScript, o uno parecido

funcion abreModal(){
name = "VentanaLlamante";
showModalDialog(url_JSP2, name);
}



En la JSP2 (ventana emergente) tendras el siguiente codigo JavaScript, o uno parecido

funcion submitHandler(){
tuformulario.target = window.dialogArguments;
tuformulario.submit();
close();
}



A la funcion submitHandler la llamas en el lugar donde normalmente iria la llamada al servlet que actualiza los datos. Supongo que sera en el onClick del boton Aceptar, ¿no?
"tuformulario" es el name del fomulario que tendras en la ventana emergente (JSP2). El action del formulario sera la url del servlet que actualiza los datos.
Estoy suponiendo que el servlet que realiza la actualizacion de los datos no falla nunca (optimista que soy yo) y no devuelve respuesta alguna.



¿Y si el servlet que actualiza los datos falla?. ¿Y si el servlet que actualiza los datos no falla, pero su ejecucion tarda tanto que pudiera ocurrir que el la peticion para leer los datos actualizados se lanza antes de que estos se hallan actualizado realmente?



Eso, amigo (¿amiga?), eso ya es otra historia. Mejor no meterse en ese berenjenal si no es imprescindible. Ahora, que si hay que meterse, nos metemos, eh... Pero meterse pa' na' es tonteria... :-p