Servlet + Jasperreport

1 resposta
V

olá a todos,
estou tentando gerar um relatório pra minha página Web.
Fiz um Servlet, fiz o relatório no IReport e fiz uma action (estou usando Struts).
O problema eh q, qndo ele gera o pdf, o mesmo vem em branco, nao aparece nenhuma linha do relatório, só q não consegui descobrir o pq dele nao aparecer nada :frowning:
Segue o código do servlet:

public class RelatorioRender extends HttpServlet {
   private static Connection con2 = null;

   private static final String CONTENT_TYPE = "application/pdf";

   public static final String PARAMETERS = "PARAMETERS";

   public static final String JASPER_URL = "JASPER_URL";

   private Logger log;

   public void init() throws ServletException {
      
   }

   protected void doGet(HttpServletRequest request,
         HttpServletResponse response) throws ServletException, IOException {
      doPost(request, response);
   }

   protected void doPost(HttpServletRequest request,
         HttpServletResponse response) throws ServletException, IOException {
      System.out.println("Wait while loadding Report...");
      if (request.getAttribute(JASPER_URL) != null) {
         response.setContentType(CONTENT_TYPE);
         HashMap params = null;
         if (request.getAttribute(PARAMETERS) != null) {
            if (request.getAttribute(PARAMETERS) instanceof HashMap) {
               params = (HashMap) request.getAttribute(PARAMETERS);
            }
         }
         String jasperUrl = (String) request.getAttribute(JASPER_URL);
         Connection conn = getConexao();
         OutputStream ops = null;

         String host = "http://" + request.getServerName() + ":"
               + request.getServerPort();
         URL jasper = new URL(host + jasperUrl);

         try {
            System.out.println("Getting the binary...");
            byte[] bytes = JasperManager.runReportToPdf(
                  jasper.openStream(), params, conn);
            ops = response.getOutputStream();
            System.out.println("Writting binary");
            ops.write(bytes);
            System.out.println("Sending report...");
         } catch (JRException ex) {
            ex.printStackTrace();
            forward(request, response, ex.getMessage());
         } finally {
            if (ops != null) {
               ops.flush();
               ops.close();
            }
            try {
               conn.close();
            } catch (SQLException ex1) {
               ex1.printStackTrace();
               forward(request, response, ex1.getMessage());
            }
         }
      } else {
         forward(request, response, "JASPER_URL nao foi passado!");
      }
   }

   private Connection getConexao() throws ServletException {
      return getConnetion();
   }

   private void forward(HttpServletRequest request,
         HttpServletResponse response, String message) throws IOException,
         ServletException {
      request.setAttribute("erro", message);
      RequestDispatcher rd = getServletContext().getRequestDispatcher(
            "/relatorio/home.jsp");
      rd.forward(request, response);
   }

   public static Connection getConnetion() {
      try {
         DriverManager.registerDriver(new com.mysql.jdbc.Driver());
         con2 = DriverManager.getConnection("jdbc:mysql://localhost/portal",
               "root", "");
         con2.setAutoCommit(true);
      } catch (SQLException e) {
         System.out.println("Erro: " + (String) e.getMessage());
      }
      return con2;
   }

}

E a Action:

public class BoletoAction extends Action {

   public ActionForward execute(ActionMapping mapping, ActionForm form,
         HttpServletRequest request, HttpServletResponse response)
         throws Exception {
      
                Associado as = (Associado) request.getSession().getAttribute("usuario");
      int id = as.getId();
      System.out.println("usuario=" + id);
      if (new Integer(id) != null) {
         HashMap map = new HashMap();
         map.put("ID", new Integer(id));

         map.put("URL", "http://" + request.getServerName() + ":"
               + request.getServerPort() + request.getContextPath() + "/");

         request.setAttribute(RelatorioRender.JASPER_URL,request.getContextPath()+ "/relatorio/caixa.jasper");
         request.setAttribute(RelatorioRender.PARAMETERS, map);
         return new ActionForward("/boleto");
      } else {
         return forward(request, response, "Erro no relatorio!");
      }
   }

   private ActionForward forward(HttpServletRequest request,
         HttpServletResponse response, String message) throws IOException,
         ServletException {
      request.setAttribute("erro", message);
      return new ActionForward("/relatorio/home.jsp");
   }

}

1 Resposta

L

bom, nao sei se eh isso, mas comigo tb acontece isso qdo o relatorio gerado nao tem nenhum dado… daí fica tudo em branco (não sei como resolver isso , pois eu queria enviar uma msg dizendo q nao tem nenhum dado)
Vê se tem algo a ser impresso, dai faz o teste

se nao for esse o erro, depois dê uma olha nesse tutis:

http://www.j2b.com.br/abstract/index.php?op=ViewArticle&articleId=7&blogId=1

t+
Aline

Criado 18 de outubro de 2004
Ultima resposta 12 de mar. de 2005
Respostas 1
Participantes 2