Servlet+JasperReports+Parametros

1 resposta
farnetani

Pessoal, tenho uma classe Imprimir.java para gerar um relatório PDF feito no jasperreports(ireport), porém quero utilizá-lo como padrão para todos os relatórios gerados. No caso de chamar o relatório já está funcionando bastando jogar como parametro(report_file=nomedorelatorio), porém, preciso passar os parametros tb, ou seja, o mapa (map), como faço isto…alguém tem alguma idéia ?

Map parameters = new HashMap();
parameters.put("COD_EMPRESA", "60");
parameters.put("GESTAO", "2005");
parameters.put("DATA", "20/01/2005");

Estes parametros acima, devem ser dinâmicos, pois se alterará para cada relatório diferente !

Obrigado,

Farnetani

package aplicacao.relatorios;

import java.io.File;

import java.sql.Connection;

import java.util.HashMap;

import java.util.Map;
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.JasperRunManager;
import regNegocio.RegNegocio;

public class Imprimir extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException {
	try {
		String rootDir = getServletContext().getRealPath("/ireports");
		Map parameters = new HashMap();

		parameters.put("COD_EMPRESA", "60");
		parameters.put("GESTAO", "2005");
		parameters.put("DATA", "20/01/2005");

		// needed for subreports:
		parameters.put("rootDir", rootDir);
		System.out.println("diretorio: " + rootDir);

		String reportFilename = rootDir + File.separator
				+ request.getParameter("report_file");
		System.out.println(reportFilename);

		File reportFile = new File(reportFilename);
		if (!reportFile.exists()) {
			return;
		}
		RegNegocio rn = new RegNegocio();
		Connection conn = rn.armaConexao();
		if (conn == null) {
			return;
		}
		byte[] buffer = null;
		buffer = JasperRunManager.runReportToPdf(reportFile.getPath(),
				parameters, conn);

		if ((buffer != null) && (buffer.length > 0)) {
			response.setContentType("application/pdf");
			response.setContentLength(buffer.length);
			ServletOutputStream ouputStream = response.getOutputStream();
			ouputStream.write(buffer, 0, buffer.length);
			ouputStream.flush();
			ouputStream.close();
		}
	} catch (Exception e) {
		throw new ServletException(e);
	}
}

}

1 Resposta

A

vc pode fazer um esquema assim (talvez tenha um jeito melhor):

Passar alguma parametro no request, para vc poder identificar no servlet qual map vc deve utilizar, tipo assim:

http://www.site.com.br/servlet?map=1

depois no servlet vc recupera este parametro e conf o parametro vc cria um map diferente:

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { Map parameters = new HashMap(); String map = request.getParameter("map"); if ( "1".equals( map ) ){ //preenche os parametros para o 1º relatorio }else if ( "2".equals( map ) ){ //preenche os parametros para o 2º relatorio } //e continha o processamento.. }

:wink:

[]'s

Criado 3 de janeiro de 2005
Ultima resposta 4 de jan. de 2005
Respostas 1
Participantes 2