Não consigo mostrar o relatório com ireport no Struts

Fala galera!
Estou tentando fazer meu primeiro relatório com ireport utilizando codigos do struts e do hibernate.
Eu criei dentro do ireport uma configuração de conexão em branco, e montei um relatorio simples para mostrar a lista que busquei no banco de dados.(não sei se fui mto claro, mas vamos prosseguir).
Pois bem, ao criar as classes, fiz conforme os codigos abaixo:

import java.util.HashMap;
import java.util.List;

import javax.servlet.http.HttpServlet;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;

public class RelProduto extends HttpServlet{
	public byte[] exibirRelatorio(List list) {
		// Caminho do .jasper
		String Relatorio = "Relatorio_Produto.jasper";
		
		// O datasource
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
		  
		byte[] bytes = null;	
		try {
		 	//ServletContext context =  getServletContext();
			JasperReport relatorioJasper1 = (JasperReport) JRLoader.loadObject("d:/tomcat/webapps/teste2/reports/Relatorio_produto.jasper");
			
			bytes = JasperRunManager.runReportToPdf (relatorioJasper1,new HashMap(), ds );  
			
		} catch (JRException e) {
			
			System.out.println(e.getMessage());
			
		}
		
		return bytes;
	}

}
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.Session;

import br.unig.teste.dao.ProdutoDao;
import br.unig.teste.hibernate.HibernateFactory;
import br.unig.teste.modelo.Produto;
import br.unig.teste.relatorio.RelProduto;

public class ConsultaAction extends Action{
	public ActionForward execute(ActionMapping mapping,
									ActionForm form,
									HttpServletRequest req,
									HttpServletResponse res){
		
		
		Session session = new HibernateFactory().getSession();
		
		Produto produto = (Produto)form;
		List produtoEncontrado = new ProdutoDao(session).pesqNome(produto);
		req.setAttribute("PRODUTOENCONTRADO",produtoEncontrado);
		
		byte[] bytes = new RelProduto().exibirRelatorio(produtoEncontrado);
		System.out.println(bytes.length);
		//Gerando a Saída
		res.setContentType("application/pdf");
		res.setContentLength(bytes.length);  
		ServletOutputStream ouputStream;
		
		try {
			ouputStream = res.getOutputStream();
			ouputStream.write(bytes, 0, bytes.length);  
			ouputStream.flush();  
			ouputStream.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return mapping.findForward(null); 

	}

}

Acontece q qdo eu faço uma pesquisa em um jsp e dou um submit, ele abre uma janela para salvar “ConsultaAction.do”, ao inves do pdf que tentei montar para imprimir.
Se alguem puder me ajudar, agradeço!!!

Valeu pela matéria. Eu já dei uma olhada, mas o que me deixa intrigado msm é que um amigo me passou essa maneira(a que eu postei) e conseguiu fazer relatorio.Mas ele não fez com struts.Ele fez da seguinte forma:

import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;

import javax.servlet.ServletContext;
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.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import br.unig.dao.ItemDao;

public class Relatorio extends HttpServlet {

	private static final long serialVersionUID = 1L;
	
	public byte[] exibirRelatorio(Collection collection) {
		// Caminho do .jasper
		String Relatorio = "JRItem.jasper";
		
		// O datasource
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(collection);
		  
		byte[] bytes = null;	
		try {
		 	ServletContext context = getServletContext();
			JasperReport relatorioJasper1 = (JasperReport) JRLoader.loadObject( context.getRealPath(Relatorio));
			
			bytes = JasperRunManager.runReportToPdf (relatorioJasper1,new HashMap(), ds );  
			
			/*
			InputStream relatorioJasper = getClass().getResourceAsStream(Relatorio);
			JasperPrint impressao = null;
			impressao = JasperFillManager.fillReport(relatorioJasper, new HashMap(), ds); 
			JasperViewer viewer = new JasperViewer(impressao, true);
			viewer.setVisible(true);
			*/		

		} catch (JRException e) {
			
			System.out.println(e.getMessage());
			
		}
		
		return bytes;
	}
	
	@Override
	protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(arg0, arg1);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse arg1) throws ServletException, IOException {
		
		// Definindo Collection
		Collection ColecaoItem = new ItemDao().findAll();
		
		//Criando o Vetor de Bytes para PDF
		byte[] bytes = exibirRelatorio( ColecaoItem);
		
		//Gerando a Saída
		arg1.setContentType("application/pdf");
		arg1.setContentLength(bytes.length);  
		ServletOutputStream ouputStream;
		
		try {
			ouputStream = arg1.getOutputStream();
			ouputStream.write(bytes, 0, bytes.length);  
			ouputStream.flush();  
			ouputStream.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

Deve ser algum detalhe, não sei…rs

Consegui…realmente era detalhe…reinstalei o acrobat reader e funcionou.

kra vc fez com Servlet e deu certo…

Mas vc conseguiu com Struts???

Estou numa duvida de colocar Servlet no Struts 1.

Se pode deixar um exemplo agradeço desde já!

me manda seu e-mail que depois te mando.

felipemeneses87@yahoo.com.br

oi ai esta meu codigo

[code] import java.io.*;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
//import javax.swing.JOptionPane;

      public class Dados{               
                   
              
          //"args" é um array de String onde cada elemento é um argumento passado pela linha de comando momento na "inicialização" da execução.    
          public static void main(String[] args){               
                  
                  
             Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();         
           try {               
             //leitura do ficheiro, prepara-o para ser aberto    
             BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));               
             String str;           
             int i = 0;           
             //vai percorrer todo o ficheiro    
             while((str = in.readLine()) != null)               
             {                     
                 if(str.startsWith("#"))    
                 {                     
                     str= "";                     
                 }                     
                 else{     //esta a dividir a frase em varias strings imprimindo o seu resultado    
                      List<String> values = new ArrayList<String>();         
                          String words[] = str.split(";");             
                          for(String word : words) {             
                              values.add(word);     
                              System.out.println(word);    
                          }         
                          mapLines.put(i, values);         
                          i++;         
                 }       
           }// fim do while                               
             in.close();               
         }  catch (IOException e){               
             // possiveis erros são tratatos aqui     
             //JOptionPane.showMessageDialog(null, this.word, "NÂO FOI POSSÍVEL ABRIR O SEU FICHEIRO", JOptionPane.ERROR_MESSAGE);      
             System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");            
         }          
         // Apresenta o contéudo do Map         
         Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();         
         for(Integer key : m.keySet()) {         
             for(String word : m.get(key)) {         
                 System.out.println(word);         
             }         
         }                  
         }     
          public static void main2(String[] args){               
                  
                  
              Map<Integer, List<String>> mapLines= new HashMap<Integer, List<String>>();         
           try {               
                        
             BufferedReader in2 = new BufferedReader(new FileReader("conteudo2.txt"));               
             String str;           
             int i = 0;           
             while((str = in2.readLine()) != null)               
             {                     
                 if(str.startsWith("#"))                     
                 {                     
                     str= "";                     
                 }                     
                 else{     //esta a dividir a frase em varias strings    
                          List<String> values = new ArrayList<String>();         
                          String words[] = str.split(" ");             
                          for(String word : words) {             
                              values.add(word);    
                              System.out.println(word);    
                          }         
                          mapLines.put(i, values);         
                          i++;         
                 }       
           }// fim do while                               
             in2.close();               
         }  catch (IOException e){               
             // possiveis erros são tratatos aqui      
             System.out.println("ERRO-->NÃO FOI ENCONTRADO O SEU FICHEIRO DE DESTINO,TENTE DE NOVO");    
         }          
         // Apresenta o contéudo do Map         
         Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();         
         for(Integer key : m.keySet()) {         
             for(String word : m.get(key)) {         
                 System.out.println(word);         
             
              }       
      
          }    
      }    
  }  [/code]  

e tenho por exemplo este ficheiro

961234567 253883377 24:05:2011 10:30:10 068 16 13 963456789 253883355 28:05:2011 12:15:17 088 12 09 963456789 253883377 29:05:2011 17:00:00 120 14 11 969876666 253883377 30:05:2011 10:05:34 070 11 09 961234567 253883377 31:05:2011 22:30:05 066 14 11 961234567 253883377 02:06:2011 14:19:41 076 15 13 963456789 253883377 05:06:2011 11:33:34 085 07 06

e queria que fosse pedido ao utilizador que dados e que ele quer imprimir. por exemplo…pedirmos para imprimir todos os dados com o numero 961234567

abraços

De uma lida nesse artigo e veja se te ajuda:

parte 1
http://www.devmedia.com.br/articles/viewcomp.asp?comp=3163

parte 2
http://www.devmedia.com.br/articles/viewcomp.asp?comp=3226

att