carlosmayo.net

Sobre mí

Buscar en el blog

Twitter

Outbox

Archivo

martes, julio 10, 2007

Utilizando Ajax y JSON con Struts

16 comentarios

En este mini-tutorial me gustaría mostrar, siguiendo un ejemplo, como he utilizado Ajax en una aplicación desarrollada con Struts. Antes de comenzar he de decir que he utilizado la librería JavaScript Prototype como ayuda.

Imaginemos que tenemos un formulario donde debemos introducir nuestro código postal, población y provincia y queremos que cuando el usuario introduzca el código postal, automáticamente aparezca en sus respectivas cajas de texto la población y provincia a la que pertenece ese código postal. El código del formulario sería algo parecido a lo siguiente:

<input type="text" id="codpostal" name="codpostal"/>
<input type="text" id="poblacion" name="poblacion"/>
<input type="text" id="provincia" name="provincia"/>

Para realizar nuestro objetivo, crearemos una funcion JavaScript que utilice Prototype para realizar una petición Ajax a una acción de Struts para hacer la búsqueda en la base de datos y que devuelva el resultado en un objeto JSON mediante el cual rellenaremos el campo población y provincia. El código de esta función sería el siguiente:

function buscaPoblacion()
{
   $('poblacion').value = "Buscando...";
   $('provincia').value = "Buscando...";

   new Ajax.Request('<html:rewrite page="/util/buscapoblacion.do"/>', {
      parameters: {codpostal: $('codpostal').value},
      onComplete: function(transport, json) {
         $('poblacion').value = json.poblacion;
         $('provincia').value = json.provincia;
      }
   });
} 

La acción de Struts que emplearemos para hacer la búsqueda en la base de datos utiliza la librería json-lib para crear objetos JSON. El código del método execute sería algo parecido a lo siguiente:

...
String codpostal=request.getParameter("codpostal);
 
// Realizar la búqueda en la base de datos y almacenar el resultado
// en las variables provincia y población
 
HasMap hm = new HasMap();
hm.put("poblacion",poblacion);
hm.put("provincia",provincia);
 
JSONObject json = JSONObject.fromObject(hm);
response.setHeader("X-JSON", json.toString());
 
return mapping.findForward("completado");
...

Al usar Struts necesitamos redirigir una acción a una página JSP. En nuestro caso no vamos a mostrar el resultado en una página JSP sino que la información JSON irá incluida en la cabecera de una página JSP en blanco. El struts-config.xml quedaría de la siguiente forma:

<action path="/util/buscapoblacion" scope="request"
type="com.util.BuscaPoblacionAction" validate="false">
<forward name="completado" path="/blanco.jsp"/>
</action>

Mas información:
- We Heart Code
- Abhi On Java

Comentarios
16 comentarios
¿Tienes alguna opinión? Deja tu comentario
Anónimo dijo...

Hola, tienes el codigo completo del ejemplo... Esta bastante interesante y me gustaria montarlo

franciscp dijo...

FRANCISCO, ME GUSTARIA SABER COMO ES EL CODIGO PARA PODER ENTENDER MAS SI PUDIERAS ENVIARME EL PROYECTO TE LO AGRADECERIA MONTON.
MI CORREO franciscp@gmail.com
DE ANTEMANO MUCHAS GRACIAS

Anónimo dijo...

Pienso lo mismo que el resto de compeñeros, si hicieras el favor de pasarme el código completo.... parece muy interesante y actualmente trabajo con struts.
rafarv@gmail.com

paolo dijo...

holas amigos por favor si ami tambien podrian enviarme el codgo del proyecto les estaria muy agradecido mi correo es polochepu@gmail.com

Daniel Calvin dijo...

Carlos, muy bueno tu artículo.
Hay posibilidades de ver un pequeño ejemplo funcionando?, el ódigo digo...

Gracias

Daniel Calvin

Anónimo dijo...

Hola carlos, veo que has trabajado bastante con struts, estoy haciendo un soporte a una aplicacion que tiene struts 1 y no estan funcionando bien los formularios con IE. De casualidad tienes un proyecto de ejemplo que funcione con struts 1, uses formularios y que funcione bn en IE8. mi correo es christian_and40@hotmail.com. Mil gracias por tu ayuda.

hpezzano dijo...

Al intentar hacer el mismo ejemplo pero cargando el hashMap con 300 valores, el json me llega vacío en el jquery. ¿hay alguna limitación de tamaño? ¿hay algún truco para solucionarlo? muchas gracias

Daniel dijo...

Buenas

Me uno a la peticion del codigo si eres tan amable, si me lo pudieras enviar a

daniel.fatico@gmail.com

saludos

Anónimo dijo...

ahhh ke bola de ignorantes, el ejemplo es bastante sencillo, piensenle un pokito, mas facil imposible.

Anónimo dijo...

Al retornar de la función java me da un error en el jsp de que el objeto json no lo reconoce ... 'json is undefined' ... vamos como si no estuviera definido y eso que está definido en la cabecera de la función .... he puesto todos los pasos y he conseguido que se redirija bien ... ¿alguien sabe porqué puede ser que en la jsp me de ese error?

Anónimo dijo...

Hola Carlos, me podrias enviar el codigo a sirda2003@hotmail.com

Muchas gracias

Anónimo dijo...

Hola, una pregunta, cuando mandas la información a la cabecera de la página en blanco ¿cómo la recuperas en el formulario original?

Muchas gracias por la página

Anónimo dijo...

esta muy bueno el ejemplo podrias enviarmelo al correo xfa jack1234@hotmail.es

Anónimo dijo...

Que tal Carlos,es un excelente ejemplo el que has aportado, pero al igual que el resto de personas, me gustaria poder ver (si es posible) el ejemplo completo...

gracias y saludos

Anónimo dijo...

A mi tambien me gustaria tener el codigo completo, muchas gracias!!
mipli80@hotmail.com

Anónimo dijo...

Buenas Noches. Alguno de uds me podria pasar el código?, intenté hacerlo, pero no me funciona. Dejo mi correo si alguno lo pudo hacer. Saludos Gracias!
mgabyvalle@gmail.com

Publicar un comentario en la entrada