Passando parametros de um bean para um servlet

3 respostas
farnetani

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

<%@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 !");
%>
------------------------------------------------------------------------------------

2) Tenho um Bean: PreparaImpressao.java

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(Vector parametros, String arquivo, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	String URL = "/SIC_WEB/aplicacao/relatorios/ListaPresenca?report_file="+arquivo; 
	HttpSession session = request.getSession();
	session.removeAttribute("parametrosRelatorio");
	request.setAttribute("parametrosRelatorio",parametros);
	response.sendRedirect(URL); //chama o servlet
	}

}
------------------------------------------------------------------------------------

3) Por fim o servlet:

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(HttpServletRequest request, HttpServletResponse response)
			throws ServletException {
		try {
			String rootDir = getServletContext().getRealPath("/ireports");
			Map parameters = new HashMap();
            String v1, v2; 
			if (request.getSession().getAttribute("parametrosRelatorio")!=null) { 
	            for(int i=0;i<((Vector)request.getSession().getAttribute("parametrosRelatorio")).size();i++)  { 

	            	v1=(((ImpressaoInfo)((Vector)request.getSession().getAttribute("parametrosRelatorio")).get(i))).getNomeParametro();
	            	v2=(((ImpressaoInfo)((Vector)request.getSession().getAttribute("parametrosRelatorio")).get(i))).getValor();
	                parameters.put(v1, v2);
	             }          								
			} else {
				System.out.println("vazio");
			}
			
/* 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:
			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);
		}
	}
}

3 Respostas

farnetani

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

package aplicacao.relatorios;

public class ImpressaoIdentidade {
	private String nomeParametro;

	private String valor;

	public String getValor() {
		return valor;
	}

	public String getNomeParametro() {
		return nomeParametro;
	}


	public void setValor(String v) {
		this.valor = v;
	}

	public void setNomeParametro(String p) {
		this.nomeParametro = p;
	}


}
------------------------------------------------------------------------------------- 2) Arquivo: ImpressaoInfo.java
package aplicacao.relatorios;

import java.util.Vector;

public class ImpressaoInfo {

	private Vector vetor = new Vector();
		
	public void addParametro(String p, String v) {
		   ImpressaoIdentidade id = new ImpressaoIdentidade();
		   id.setNomeParametro(p);
		   id.setValor(v);
		   vetor.add(id);
	}
	public Vector getVetor() {
		return vetor;
	}
	
}
-------------------------------------------------------------------------------------

3) Arquivo: PrepararImpressao.java (servlet)

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("parametrosRelatorio");
		session.setAttribute("parametrosRelatorio", parametros);

		session.removeAttribute("arquivoRelatorio");
		session.setAttribute("arquivoRelatorio", arquivo);

		response.sendRedirect(URL);
	}
}

-------------------------------------------------------------------------------------

4) Arquivo: Imprimir.java (servlet)

/*
 * 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(HttpServletRequest request, HttpServletResponse response)
			throws ServletException {
		try {
			String rootDir = getServletContext().getRealPath("/ireports");
			Map parameters = new HashMap();
            String v1, v2;
            String arquivo="";

			if (request.getSession().getAttribute("arquivoRelatorio")!=null) {
				arquivo=((String)request.getSession().getAttribute("arquivoRelatorio"));
			}
            
            if (request.getSession().getAttribute("parametrosRelatorio")!=null) { 
	            for(int i=0;i<((Vector)request.getSession().getAttribute("parametrosRelatorio")).size();i++)  { 

	            	v1=(((ImpressaoIdentidade)((Vector)request.getSession().getAttribute("parametrosRelatorio")).get(i))).getNomeParametro();
	            	v2=(((ImpressaoIdentidade)((Vector)request.getSession().getAttribute("parametrosRelatorio")).get(i))).getValor();
	                parameters.put(v1, v2);
	             }          								
			} else {
				System.out.println("vazio");
			}
			
/*
 			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");
			String reportFilename = rootDir + File.separator + arquivo;			
			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);
		}
	}
}

-------------------------------------------------------------------------------------

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

<%@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  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);
%>

-------------------------------------------------------------------------------------

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

Espero que dê suas opiniões

Abraços,

Arlei Ferreira Farnetani Junior :!:

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

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

N

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

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