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:
- 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]
- 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(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
}
}[/code]
- 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(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);
}
}
}[/code]