Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/10/2007, 06:40
akiles83
 
Fecha de Ingreso: octubre-2007
Mensajes: 28
Antigüedad: 17 años, 1 mes
Puntos: 0
De acuerdo Ayuda con XMLHttpRequest de Ajax

Hola, soy nuevo en el foro y estoy aprendiendo a usar Ajax, os voy a exponer mi problema lo mas detallado posible.

Necesito mostrar en una JSP un grafico utilizando JFreeChart, para ello hice inicialmente un servlet:
Código:
<servlet-mapping>
<servlet-name>ServletGraficoBarraMultiple</servlet-name>
<url-pattern>/ServletGraficoBarraMultiple</url-pattern>
</servletmapping> <servlet>
<servlet-name>ServletGraficoBarraMultiple</servlet-name>
<servlet-class>bw_co_ServletGraficoBarraMultiple</servlet-class>
</servlet>
Entonce en el codigo de la jsp seria,

Código HTML:
<script>[INDENT]
function createXMLHttp(){
		try{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				xmlHttp =  new ActiveXObject("Microsoft.XMLHTTP");
			}catch(oc){
				xmlHttp = false;
			}
		}
		
		if (!xmlHttp && typeof XMLHttpRequest != "undefined"){
			try{
				xmlHttp = new XMLHttpRequest();
			}catch (E){
				xmlHttp=false;
			}
		}
		return xmlHttp;
}
	function envioInfo (){
		//Creamos el objeto xmlHttpRequest
		alert("Creamos el objeto xmlHttp");
		createXMLHttp();
		
		//Definimos la llamada para POST
		alert("Definimos la llamada para POST");
		var info = document.forms['formularioDiv2'].graficoMens.src;
		
		//Marcar que función manejará la respuesta
		xmlHttp.open("POST","ServletGraficoBarraMultiple",true);
		alert("Marcamos la función que maneja la respuesta");
		xmlHttp.onreadystatechange = recogeInfo;
		
		//Enviar
		alert("enviamos los datos");
		xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
		xmlHttp.send(info);
	}

	function recogeInfo(){
		alert(xmlHttp.readyState + " " + xmlHttp.status);
		if (xmlHttp.readyState == 4){
			document.getElementById("div1").innerHTML=xmlHttp.responseText;
			//document.forms['formularioDiv2'].graficoMens.src=+xmlHttp.responseStream+"'";
			alert(xmlHttp.responseText);
		}
	}
[/INDENT]</script>
<body onLoad="javascript:envioInfo();">
....
<div id="div1">[INDENT]<img src="ServletGraficoBarraMultiple?datos=.....">[/INDENT]</div>
....
</body> 
decir que la url debe ser pasada por POST ya que por GET tiene un limite de 2.048 caracteres, y los datos pueden ser hasta diez veces mas. Ahora tendriamos la función Java que trata los datos enviados a través del POST.

Código:

public class bw_co_ServletGraficoBarraMultiple extends HttpServlet{
public void doPost(HttpServletRequest req, HttpServletResponse res){
//recogemos los parametros de la request //Creamos el graficoBarras graficoBarras = ChartFactory.createBarChart3D(titulo, tituloX, tituloY, dataset, vertical, true, true, false); try{
OutputStream out = res.getOutputStream(); ChartUtilities.writeChartAsPNG(out,graficoBarras,ancho,alto); out.flush(); out.close();
}catch(Exception e){
e.printstacktrace();
}
}
{
Comentaros que el método writeChartAsPNG pinta la imagen a través del OutputStream que se le pasa como parametro "out".

Lo que yo no se es como puedo hacer la función java script recogeInfo() para que me pinte lo que hago en la clase Java bw_co_ServletGraficoBarrasMultiple.

Gracias y un saludo.

Última edición por akiles83; 31/10/2007 a las 06:46