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.