Galera,
Estou emitindo relatórios jasperReports com chamadas ajax. Percebi que o doGet() é executado duas vezes quando mando emitir o relatório. Identifiquei que o ajax está fazendo isso, mas não entendo o motivo. Gostaria de melhorar essa lógica para não prejudicar o desempenho do meu servidor.Por favor, me ajudem.
Chamadas ajax
function submitAjax(){
htmlText = '<i18n:message key='paginaRelatorio.carregarRelatorio'/>';
document.getElementById("info").innerHTML=htmlText;
var url = "relatorio?relat=Produtividade¶metro=1";
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function handleStateChange(){
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
var size = xmlHttp.responseText.length;
if(size>2){
document.forms[0].submit();
}else {
alert('Não há dados');
}
}
}
}
ServletRelatorio.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
//SEMPRE PASSA DUAS VEZES POR AQUI
//declarações e outras particularidades
list = (List)AtividadeFuncionarioFactory.generateCollection();
relatorioXml = context.getRealPath(getNomeRelatorioTemplate());
parameters=parametrizar();
byte[] output = null;
JRExporter exporter = null;
if (list.size() > 0) {
response.setContentType("application/pdf");
output = Report.exportReportToPdf(Report.generate(list, relatorioXml, parameters));
response.setHeader("Content-Disposition", "attachment; filename=relatorio" + extensao);
response.setContentLength(output.length);
ServletOutputStream ouputStream;
ouputStream = response.getOutputStream();
ouputStream.write(output);
ouputStream.flush();
ouputStream.close();
}
}
Obrigado