Passando parametros de um bean para um servlet

Pessoal, tenho um bean que chama um servlet…como faço para que este servlet pegue os parametros do bean.

Na verdade são 3 arquivos:

  1. Relatorio.jsp

[code]<%@page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*, java.util.Properties, java.io.FileInputStream, java.io.File, java.util.Vector"%>
<%@ page errorPage="global/errorpage.jsp" %>

<jsp:useBean id="rel" class="aplicacao.relatorios.PrepararImpressao" scope="session"/>
<%@page import="aplicacao.relatorios.ImpressaoInfo"%>

<%
ImpressaoInfo p1 = new ImpressaoInfo();
ImpressaoInfo p2 = new ImpressaoInfo();
ImpressaoInfo p3 = new ImpressaoInfo();
Vector v = new Vector();

p1.nomeParametro = "COD_EMPRESA";
p1.valor = "60";
v.add(p1);

p2.nomeParametro = "GESTAO";
p2.valor = "1000";
v.add(p2);

p3.nomeParametro = "DATA";
p3.valor = "01/01/2005";
v.add(p3);

rel.chamaRelatorio(v, "lista.jasper", request, response);
out.println("Processado !");
%>[/code]

  1. Tenho um Bean: PreparaImpressao.java

[code]package aplicacao.relatorios;

import java.io.IOException;
import java.util.Vector;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class PrepararImpressao extends HttpServlet {

public void chamaRelatorio&#40;Vector parametros, String arquivo, HttpServletRequest request, HttpServletResponse response&#41; throws ServletException, IOException &#123;
String URL = &quot;/SIC_WEB/aplicacao/relatorios/ListaPresenca?report_file=&quot;+arquivo; 
HttpSession session = request.getSession&#40;&#41;;
session.removeAttribute&#40;&quot;parametrosRelatorio&quot;&#41;;
request.setAttribute&#40;&quot;parametrosRelatorio&quot;,parametros&#41;;
response.sendRedirect&#40;URL&#41;; //chama o servlet
&#125;

}[/code]

  1. Por fim o servlet:

[code]package aplicacao.relatorios;

import java.io.File;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;

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 ListaPresenca extends HttpServlet {

public void service&#40;HttpServletRequest request, HttpServletResponse response&#41;
		throws ServletException &#123;
	try &#123;
		String rootDir = getServletContext&#40;&#41;.getRealPath&#40;&quot;/ireports&quot;&#41;;
		Map parameters = new HashMap&#40;&#41;;
        String v1, v2; 
		if &#40;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;!=null&#41; &#123; 
            for&#40;int i=0;i&lt;&#40;&#40;Vector&#41;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;&#41;.size&#40;&#41;;i++&#41;  &#123; 

            	v1=&#40;&#40;&#40;ImpressaoInfo&#41;&#40;&#40;Vector&#41;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;&#41;.get&#40;i&#41;&#41;&#41;.getNomeParametro&#40;&#41;;
            	v2=&#40;&#40;&#40;ImpressaoInfo&#41;&#40;&#40;Vector&#41;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;&#41;.get&#40;i&#41;&#41;&#41;.getValor&#40;&#41;;
                parameters.put&#40;v1, v2&#41;;
             &#125;          								
		&#125; else &#123;
			System.out.println&#40;&quot;vazio&quot;&#41;;
		&#125;

/* Aqui é o lance…nesta parte quero que os parametros fiquem dinâmicos
parameters.put("COD_EMPRESA", "60");
parameters.put("GESTAO", "2005");
parameters.put("DATA", "20/01/2005");
*/

		// needed for subreports&#58;
		parameters.put&#40;&quot;rootDir&quot;, rootDir&#41;;
		System.out.println&#40;&quot;diretorio&#58; &quot; + rootDir&#41;;

		String reportFilename = rootDir + File.separator
				+ request.getParameter&#40;&quot;report_file&quot;&#41;;
		System.out.println&#40;reportFilename&#41;;

		File reportFile = new File&#40;reportFilename&#41;;
		if &#40;!reportFile.exists&#40;&#41;&#41; &#123;
			return;
		&#125;
		RegNegocio rn = new RegNegocio&#40;&#41;;
		Connection conn = rn.armaConexao&#40;&#41;;
		if &#40;conn == null&#41; &#123;
			return;
		&#125;
		byte&#91;&#93; buffer = null;
		buffer = JasperRunManager.runReportToPdf&#40;reportFile.getPath&#40;&#41;,
				parameters, conn&#41;;

		if &#40;&#40;buffer != null&#41; &amp;&amp; &#40;buffer.length &gt; 0&#41;&#41; &#123;
			response.setContentType&#40;&quot;application/pdf&quot;&#41;;
			response.setContentLength&#40;buffer.length&#41;;
			ServletOutputStream ouputStream = response.getOutputStream&#40;&#41;;
			ouputStream.write&#40;buffer, 0, buffer.length&#41;;
			ouputStream.flush&#40;&#41;;
			ouputStream.close&#40;&#41;;
		&#125;
	&#125; catch &#40;Exception e&#41; &#123;
		throw new ServletException&#40;e&#41;;
	&#125;
&#125;

}[/code]

Galera…vcs me desculpem…mas foi falta de atenção minha…

Errado:

session.removeAttribute(“parametrosRelatorio”);
request.setAttribute(“parametrosRelatorio”, parametros); //o erro está nesta linha, ao invés de request…tenho que usar session…viajei

Correto:

session.removeAttribute(“parametrosRelatorio”);
session.setAttribute(“parametrosRelatorio”, parametros);

Como gosto de compartilhar…até mesmo pq muitos de vcs me ajudaram e ainda ajudam…acho que ficou legal o meu código…vou postar aqui para que todos aqueles que quiserem possam usufruir e dar suas opiniões:

O esquema ficou em 4 arquivos .JAVA e um .jsp:

  1. Arquivo: ImpressaoIdentidade.java

[code]package aplicacao.relatorios;

public class ImpressaoIdentidade {
private String nomeParametro;

private String valor;

public String getValor&#40;&#41; &#123;
	return valor;
&#125;

public String getNomeParametro&#40;&#41; &#123;
	return nomeParametro;
&#125;


public void setValor&#40;String v&#41; &#123;
	this.valor = v;
&#125;

public void setNomeParametro&#40;String p&#41; &#123;
	this.nomeParametro = p;
&#125;

}[/code]

  1. Arquivo: ImpressaoInfo.java

[code]package aplicacao.relatorios;

import java.util.Vector;

public class ImpressaoInfo {

private Vector vetor = new Vector&#40;&#41;;
	
public void addParametro&#40;String p, String v&#41; &#123;
	   ImpressaoIdentidade id = new ImpressaoIdentidade&#40;&#41;;
	   id.setNomeParametro&#40;p&#41;;
	   id.setValor&#40;v&#41;;
	   vetor.add&#40;id&#41;;
&#125;
public Vector getVetor&#40;&#41; &#123;
	return vetor;
&#125;

}[/code]

  1. Arquivo: PrepararImpressao.java (servlet)

[code]package aplicacao.relatorios;

import java.io.IOException;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class PrepararImpressao extends HttpServlet {
public void chamaRelatorio(Vector parametros, String arquivo,
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String URL = "/SIC_WEB/aplicacao/relatorios/Imprimir";
HttpSession session = request.getSession();

	session.removeAttribute&#40;&quot;parametrosRelatorio&quot;&#41;;
	session.setAttribute&#40;&quot;parametrosRelatorio&quot;, parametros&#41;;

	session.removeAttribute&#40;&quot;arquivoRelatorio&quot;&#41;;
	session.setAttribute&#40;&quot;arquivoRelatorio&quot;, arquivo&#41;;

	response.sendRedirect&#40;URL&#41;;
&#125;

}[/code]


  1. Arquivo: Imprimir.java (servlet)

[code]/*

  • Created on 03/01/2005
  • TODO To change the template for this generated file go to Window -
  • Preferences - Java - Code Style - Code Templates
    */
    package aplicacao.relatorios;

import java.io.File;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;

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&#40;HttpServletRequest request, HttpServletResponse response&#41;
		throws ServletException &#123;
	try &#123;
		String rootDir = getServletContext&#40;&#41;.getRealPath&#40;&quot;/ireports&quot;&#41;;
		Map parameters = new HashMap&#40;&#41;;
        String v1, v2;
        String arquivo=&quot;&quot;;

		if &#40;request.getSession&#40;&#41;.getAttribute&#40;&quot;arquivoRelatorio&quot;&#41;!=null&#41; &#123;
			arquivo=&#40;&#40;String&#41;request.getSession&#40;&#41;.getAttribute&#40;&quot;arquivoRelatorio&quot;&#41;&#41;;
		&#125;
        
        if &#40;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;!=null&#41; &#123; 
            for&#40;int i=0;i&lt;&#40;&#40;Vector&#41;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;&#41;.size&#40;&#41;;i++&#41;  &#123; 

            	v1=&#40;&#40;&#40;ImpressaoIdentidade&#41;&#40;&#40;Vector&#41;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;&#41;.get&#40;i&#41;&#41;&#41;.getNomeParametro&#40;&#41;;
            	v2=&#40;&#40;&#40;ImpressaoIdentidade&#41;&#40;&#40;Vector&#41;request.getSession&#40;&#41;.getAttribute&#40;&quot;parametrosRelatorio&quot;&#41;&#41;.get&#40;i&#41;&#41;&#41;.getValor&#40;&#41;;
                parameters.put&#40;v1, v2&#41;;
             &#125;          								
		&#125; else &#123;
			System.out.println&#40;&quot;vazio&quot;&#41;;
		&#125;

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

		// needed for subreports&#58;
		parameters.put&#40;&quot;rootDir&quot;, rootDir&#41;;
		System.out.println&#40;&quot;diretorio&#58; &quot; + rootDir&#41;;

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

		File reportFile = new File&#40;reportFilename&#41;;
		if &#40;!reportFile.exists&#40;&#41;&#41; &#123;
			return;
		&#125;
		RegNegocio rn = new RegNegocio&#40;&#41;;
		Connection conn = rn.armaConexao&#40;&#41;;
		if &#40;conn == null&#41; &#123;
			return;
		&#125;
		byte&#91;&#93; buffer = null;
		buffer = JasperRunManager.runReportToPdf&#40;reportFile.getPath&#40;&#41;,
				parameters, conn&#41;;

		if &#40;&#40;buffer != null&#41; &amp;&amp; &#40;buffer.length &gt; 0&#41;&#41; &#123;
			response.setContentType&#40;&quot;application/pdf&quot;&#41;;
			response.setContentLength&#40;buffer.length&#41;;
			ServletOutputStream ouputStream = response.getOutputStream&#40;&#41;;
			ouputStream.write&#40;buffer, 0, buffer.length&#41;;
			ouputStream.flush&#40;&#41;;
			ouputStream.close&#40;&#41;;
		&#125;
	&#125; catch &#40;Exception e&#41; &#123;
		throw new ServletException&#40;e&#41;;
	&#125;
&#125;

}[/code]


  1. Arquivo: imp.jsp (é apenas este pedaço de código que chama qualquer .jasper

[code]<%@page contentType="text/html; charset=iso-8859-1" language="java" import="java.sql.*, java.util.Properties, java.io.FileInputStream, java.io.File, java.util.Vector"%>
<%@ page errorPage="global/errorpage.jsp" %>

<jsp:useBean id="rel" class="aplicacao.relatorios.PrepararImpressao" scope="session"/>
<%@page import="aplicacao.relatorios.ImpressaoInfo"%>

<%
// Aqui tá o esquema
ImpressaoInfo info = new ImpressaoInfo();

// Esta é a parte que irá alterar pra cada relatório
info.addParametro("COD_EMPRESA","59");
info.addParametro("GESTAO","1005");
info.addParametro("DATA","31/12/1977");

//aqui o importante é o arquivo .jasper que no caso é o lista.jasper
rel.chamaRelatorio(info.getVetor(), "lista.jasper", request, response);
%>[/code]


Como vcs podem ver…a única coisa que mudará agora é o .jsp

Espero que dê suas opiniões

Abraços,

            Arlei Ferreira Farnetani Junior   :!:

e se não estiver em code tu edita e coloca code né! … :eek: hehea

Blz Arlei! Mas da próxima vez, coloca o código dentro das tags [code]! :wink: