carlosmayo.net

Sobre mí

Buscar en el blog

Twitter

Outbox

Archivo

Etiquetas

martes, julio 10, 2007

Utilizando Ajax y JSON con Struts

9 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
9 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...

Este post es una mierda, tu ejemplo no sirve para nada, es de lo mas mentira que he visto, si sirviera tirarias una pagina con datos y no una pagina en blanco.

Eres de lo mas mentiroso que hay CHANTA!!!!!

Publicar un comentario en la entrada