Duvida iReport

25/03/2009

Desenvolvi um relatório que funciona, mas o problema que ele abre na pagina e estou querendo que abra uma janela para salvar na area de trabalho vou mandar o código :


package com.br.servlets;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

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

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

import com.br.beans.Login;
import com.br.conexao.ConexaoIreport;

/**
 * Servlet implementation class ServletRelatorioConsultaPotencial
 */

public class ServletRelatorioConsultaPotencial extends HttpServlet {
    private static final long serialVersionUID = 1L;
   
    protected void processRequest(HttpServletRequest httpServletRequest , HttpServletResponse httpServletResponse)
      throws ServletException, IOException {
       
        String marco = httpServletRequest.getParameter("marco_opr");
        String area = httpServletRequest.getParameter("numeropropriedade_opr");
        String vinculo = httpServletRequest.getParameter("vinculopessoas");
        String renda_principal = httpServletRequest.getParameter("rendaprincipalpessoas");
        String atividade_principal = httpServletRequest.getParameter("Atividadepricipalpessoas");
        String atividade_secundaria =  httpServletRequest.getParameter("atividadesecundariapessoas");
        String parentesco = httpServletRequest.getParameter("parentescopessoas");
       
        if (marco.equals("") == false && area.equals("") == false && vinculo.equals("") == false  && renda_principal.equals("") == false && atividade_principal.equals("") == false && atividade_secundaria.equals("") == false && parentesco.equals("") == false){
           
            String path = getServletContext().getRealPath("/relatorios/");
            String relJasper = path+ "\\ConsultaPotencial.jasper";
           
            HttpSession httpSession = httpServletRequest.getSession();
           
            List  listSession =    (List) httpSession.getAttribute("login");
           
            Iterator i = listSession.iterator();
                while (i.hasNext()){
                    Login login = (Login)i.next();
                   
                    login.setUsuario(login.getUsuario());
                    String usuario = login.getUsuario();
                   
                    Map parameter =  new HashMap();
                    parameter.put("Marco", marco);
                    parameter.put("Area",Double.parseDouble(area));
                    parameter.put("Tipo_Vinculo", Integer.parseInt(vinculo));
                    parameter.put("Tipo_renda_principal",Integer.parseInt(renda_principal));
                    parameter.put("AtividadePrincipal", Integer.parseInt(atividade_principal));
                    parameter.put("AtividadeSecundaria",Integer.parseInt(atividade_secundaria));
                    parameter.put("Tipo_parentesco", Integer.parseInt(parentesco));
                    parameter.put("Usuario",usuario);
                   
                    JasperPrint report = null;
                   
                    ConexaoIreport conexaoIreport = new ConexaoIreport();
                   
                        try{
                            report = JasperFillManager.fillReport(relJasper, parameter, conexaoIreport.getConnection());
                            JasperExportManager.exportReportToPdfFile(report, "ArquivoPdf.pdf"); 
                            httpServletResponse.setContentType("application/pdf");
                           
                            JasperExportManager.exportReportToPdf(report);
                            byte x1[] =  JasperExportManager.exportReportToPdf(report);
                           
                            httpServletResponse.getOutputStream().write(x1);
                        }
                        catch (Exception e) {
                            System.out.print(e.getMessage());
                            e.printStackTrace();
                        }
                }
           
        }
       
        else if (atividade_principal.equals("") == true || atividade_secundaria.equals("") == true || parentesco.equals("") == true) {
           
            String path = getServletContext().getRealPath("/relatorios/");
            String relJasper = path+ "\\ConsultaPotencialResumido.jasper";
           
            HttpSession httpSession = httpServletRequest.getSession();
           
            List  listSession =    (List) httpSession.getAttribute("login");
           
            Iterator i = listSession.iterator();
                while (i.hasNext()){
                    Login login = (Login)i.next();
                   
                    login.setUsuario(login.getUsuario());
                    String usuario = login.getUsuario();
                   
                    Map parameter =  new HashMap();
                    parameter.put("Marco", marco);
                    parameter.put("Area",Double.parseDouble(area));
                    parameter.put("Tipo_Vinculo", Integer.parseInt(vinculo));
                    parameter.put("Tipo_renda_principal",Integer.parseInt(renda_principal));
                    parameter.put("Usuario",usuario);
                   
                    JasperPrint report = null;
                   
                    ConexaoIreport conexaoIreport = new ConexaoIreport();
                   
                        try{
                            report = JasperFillManager.fillReport(relJasper, parameter, conexaoIreport.getConnection());
                            JasperExportManager.exportReportToPdfFile(report, "ArquivoPdf.pdf"); 
                            httpServletResponse.setContentType("application/pdf");
                           
                            byte x1[] =  JasperExportManager.exportReportToPdf(report);
                           
                            httpServletResponse.getOutputStream().write(x1);
                        }
                        catch (Exception e) {
                            System.out.print(e.getMessage());
                            e.printStackTrace();
                        }
                }
        }
        else {
            httpServletResponse.sendRedirect("error.jsp");
        }
     }

    public ServletRelatorioConsultaPotencial() {
        super();
        // TODO Auto-generated constructor stub
    }
   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }
}

Cristian Mietlicki

Cristian Mietlicki

Curtidas 0

Melhor post

Cristian Mietlicki

Cristian Mietlicki

25/03/2009

A parte que chama relatório  é essa :

   <td><input type="submit" value="Tela" onclick="javascript:direcionaConsultaTela();"></td>
        <td><input type="submit" value="Relatório" onclick="javascript:geraRelatorio(); target="_blank"> </td>

Na verdade não da erro , só da um refresh na página  e apaga os registros.
GOSTEI 1

Mais Respostas

Henrique Weissmann

Henrique Weissmann

25/03/2009

Se o relatório for gerado a partir de um link, há duas soluções para o seu problema:

1. NO link, mude o atributo target da tag a para _blank

2. Utilizando Javascript, crie uma nova janela cuja URL aponte para a responsável pela geração do relatório
GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

25/03/2009

Não Intendi , você tem um exemplo?
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

25/03/2009

Sim claro,

bem: sua aplicação gera o relatório a partir de um servlet, correto?

Neste caso, na página HTML que chama o servlet, voce poderia fazer algo como

<a href="/path/para/seu/servlet/com/parametros/se/for/o/caso" target="_blank">Gerar relatório</a>

Se quiser, pode também utilizar uma função javascript que gere uma janela cuja URL seja a URL do seu servlet. Neste link explica como fazer isto: http://www.pageresource.com/jscript/jwinopen.htm
GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

25/03/2009

O meu problema é ao inves de geral a relatório em tela quero que abra uma janela para salvar , a alteração não deveria ser na servlet do relatório?
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

25/03/2009

Neste caso não Cristian,

porque o servlet só funciona do lado do servidor. Ele só envia os dados para o cliente. Se é para ser aberto em outra janela ou não, o servidor simplesmente ignora.

Esta parte é de responsabilidade da interface gráfica do cliente no caso. Sendo assim, as únicas soluções que consigo ver para este caso é uma das duas que citei anteriormente.
GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

25/03/2009

Fiz dessa maneira no jsp e deu erro:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="java.sql.*,com.br.dao.*"%>
<jsp:useBean id="marcosBean" scope="session" class="com.br.controle.ControleMarco"/>
<jsp:useBean id="vinculoBean" scope="session" class="com.br.controle.ControleVinculo"/>
<jsp:useBean id="atividadeBean" scope="session" class="com.br.controle.ControleAtividadePrincipal"/>
<jsp:useBean id="fonterendaBean" scope="session" class="com.br.controle.ControleFonteRenda"/>
<jsp:useBean id="parentescoBean" scope="session" class="com.br.controle.ControleParentesco"/>
<jsp:useBean id="atividadeSecundariaBean" scope="session" class="com.br.controle.ControleAtividadeSecundaria"/>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" language="">

    function direcionaListarPotencial(){
        window.location = "../consultas/consultarusuario.jsp";
    }

    function converSaoHectAlqueire(){
      window.open("../calculo/conversaoalqueire.jsp", "Pagina2" , "height = 200 , width = 400");
    }

    function direcionaConsultaTela(){
        document.form.action = "../consultas/consultalistapotencial.jsp";
    }

    function geraRelatorio(){
      document.form.action = "../../ServletRelatorioConsultaPotencial";
    }
   
</script>
<style type="text/css" title="mystyles" media="all">

<!--
table { background-color: ;
 
 color: black;

  }
 body { background-color: ;
 
 color: black;

 margin-left: 170px;
 
 font-size: medium;

 line-height: 180%;

  }
                   
 p { text-indent: 3em;}
 
-->
 
</style>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Potencial para Reassentamento</title>

</head>
   
<body>
    <h3>Consulta Potencial para Reassentamento</h3>
<form method="post" name="form">
 <table border="1" bgcolor="" width="500">
    <tr>
        <td>* Marco</td>
            <td><select name="marco_opr" id="marcos">
            <c:forEach items="${marcosBean.buscarTodosMarcos}" var="marcos"> 
                 <option>${marcos.sigla}</option> 
              </c:forEach> 
        </select></td>
    </tr>
   
    <tr>
        <td>* Área em Alqueire</td>
        <td><input type="text" name="numeropropriedade_opr" > <input type="button" onclick="javascript:converSaoHectAlqueire();" value="Converter" > </td>
    </tr>
   
    <tr>
        <td>* Vinculo</td>
        <td><select name="vinculopessoas" id="vinculo">
        <option value="">.............. Selecione ..............</option>
        <c:forEach items="${vinculoBean.buscarTodosVinculos}" var="vinculo" > 
                 <option value="${vinculo.cod}">${vinculo.nome_vinculo}</option> 
              </c:forEach> 
        </select></td>
    </tr>
   
    <tr>
        <td>* Renda principal</td>
        <td><select name="rendaprincipalpessoas" id="rendaprincipal">
        <option value="">.............. Selecione ..............</option>
        <c:forEach items="${fonterendaBean.buscarTodosFonteRenda}" var="rendaprincipal"> 
                 <option value="${rendaprincipal.cod}">${rendaprincipal.renda_principal}</option> 
              </c:forEach> 
        </select></td>
    </tr>
    <tr>
        <td> Atividade principal</td>
        <td><select name="Atividadepricipalpessoas" id="atividade">
        <option value="">.............. Selecione ..............</option>
        <c:forEach items="${atividadeBean.buscarTodasAtividadesPrincipais}" var="atividade"> 
                 <option value="${atividade.cod_atividade_principal}">${atividade.descricao_atividade_principal}</option> 
              </c:forEach> 
        </select></td>
    </tr>
   
    <tr>
        <td>Atividade secundaria</td>
        <td><select name="atividadesecundariapessoas" id="atividadesecundaria">
        <option value="">.............. Selecione ..............</option>
        <c:forEach items="${atividadeSecundariaBean.buscarTodasAtividadesSecundaria}" var="atividadesecundaria"> 
                 <option value="${atividadesecundaria.cod_atividade_secundaria}">${atividadesecundaria.descricao_atividade_secundaria}</option> 
              </c:forEach> 
        </select></td>
    </tr>
   
    <tr>
        <td>Renda principal</td>
        <td><select name="rendaprincipalpessoas" id="rendaprincipal">
        <option value="">.............. Selecione ..............</option>
        <c:forEach items="${fonterendaBean.buscarTodosFonteRenda}" var="rendaprincipal"> 
                 <option value="${rendaprincipal.cod}">${rendaprincipal.renda_principal}</option> 
              </c:forEach> 
        </select></td>
    </tr>
   
    <tr>
        <td>Parentesco</td>
        <td><select name="parentescopessoas" id="parentesco">
        <option value="">.............. Selecione ..............</option>
        <c:forEach items="${parentescoBean.buscarTodosParentesco}" var="parentesco"> 
                 <option value="${parentesco.cod}">${parentesco.nomeparentesco}</option> 
              </c:forEach> 
        </select></td>
    </tr>
   
    <tr>
        <td><input type="submit" value="Tela" onclick="javascript:direcionaConsultaTela();"></td>
        <td><input type="submit" value="Relatório" onclick="javascript:geraRelatorio(); target="_blank"> </td>
    </tr>
   
</table>
</form>
</body>
</html>
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

25/03/2009

Cristian, qual foi o erro?

E dentro do JSP, qual a parte dele que gera o relatório?
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

25/03/2009

Cristian, pelo código já da pra perceber algumas coisas que precisam ser mudadas.

1. Inclua o atributo target="_blank" na tag form, e não na tag input
2. Na sua tag input, repare que voce não fechou os valores:
onclick="javascript:geraRelatorio(); target="_blank"
deveria ser
onclick="javascript:geraRelatorio();" target="_blank"



<td><input type="submit" value="Tela" onclick="javascript:direcionaConsultaTela();"></td>
        <td><input type="submit" value="Relatório" onclick="javascript:geraRelatorio(); target="_blank"> </td>
GOSTEI 0
Cristian Mietlicki

Cristian Mietlicki

25/03/2009

Ok, funcionou perfeitamente, muito obrigado.
GOSTEI 1
POSTAR