Lista,
Estou aprendendo sobre ireport/jasperreports e segui um exemplo que veio na javamagazine. Porém tenho uma dúvida:
Caso eu queira, no servlet abaixo, passar a query do subrelatório como parâmento, é possível? Se sim, como fazer, pois sinceramente não estou conseguindo.
Ou será que preciso desenvolver formularios diferentes para cada query? Como vcs fazem?
Muito obrigado,
Marques
package br.com.globalcode.servlet;
import br.com.globalcode.exception.GlobalcodeException;
import br.com.globalcode.locator.ServiceLocator;
import java.io.IOException;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.util.JRLoader;
public class GeraRelatorioPedidos extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// obtém a conexão com o banco de dados
Connection conn = null;
try {
conn = ServiceLocator.getInstance().getConnection();
} catch (GlobalcodeException ex) {
ex.printStackTrace();
}
// gera o relatório
ServletContext context = getServletContext();
byte[] bytes = null;
try {
// carrega os arquivos jasper
JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(
context.getRealPath("/WEB-INF/reports/RelatorioPedidos.jasper"));
JasperReport subrelatorioJasper = (JasperReport)JRLoader.loadObject(
context.getRealPath("/WEB-INF/reports/RelatorioItens.jasper"));
// parâmetros, se houverem
Map parametros = new HashMap();
parametros.put("pageRoot", context.getRealPath("/"));
parametros.put("subReport", subrelatorioJasper);
// direciona a saída do relatório para um stream
bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,conn);
} catch (JRException e) {
e.printStackTrace();
}
if (bytes != null && bytes.length > 0) {
// envia o relatório em formato PDF para o browser
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
}
}