Ireport x vraptor2

Caros boa noite.
Existe algum tutorial, artigo ou exemplo para uso do ireport?
estou meio perdido, pois não se devo criar uma relatorio.logic,
que argumentos passar, onde colocar o relatório e como chama-lo.
Muito obrigado :smiley:

Amigos,gostaria de saber se funciona vraptor2 com ireport, ou se existe alguma outra forma de gerar relatório.
Muito obrigado

[quote=roger2007]
Amigos,gostaria de saber se funciona vraptor2 com ireport, ou se existe alguma outra forma de gerar relatório.
Muito obrigado[/quote]

Vi alguns exemplos na net e pergunto :
É preciso fazer uma nova conexão ao BD e usar SQL.
Podemos utilizar a conexão gerada pelo ireport?
é preciso fazer alguma alteração no view properties ou no webxml ?
Esse assunto é muito importante a maioria dos sistemas precisa gerar relatórios.
Agradeço a todos e peço ajuda a todos?
Muito obrigado

Na documentação do VRaptor 2, voce encontra este material de apoio: http://vraptor.caelum.com.br/vraptor2/pt/file-download.html
Útil para quem sabe gerar o arquivo para Dowunload.

Cinei boa tarde.
O relatório será aberto quando for requerido ou ele vai para alguma pasta?

clientOutput.setContentType(“application/pdf”);
Aqui seria o .jxml gerado pelo ireport?

Muito obrigado, pelo direcionamento, pois até agora estava completamente no escuro.

Roger,

Da uma olhada nesse link.
http://www.guj.com.br/posts/list/122447.java#662399

[quote=luiscolling]Roger,

Da uma olhada nesse link.
http://www.guj.com.br/posts/list/122447.java#662399[/quote]

Caro luiscolling boa tarde.

Conexao con = new Conexao();
É pra criar uma conexão direta com o banco de dados? e não usar o que é gerado no ireport?

Muito obrigado

Boa tarde Roger,

A conexão do iReport que tu esta falando pelo que entendi é a conexão que é configurada para ser usada durante o desenvolvimento do layout.

[quote=luiscolling]Boa tarde Roger,

A conexão do iReport que tu esta falando pelo que entendi é a conexão que é configurada para ser usada durante o desenvolvimento do layout.[/quote]
essa mesma, não devo usá-la?

Essa conexão do iReport não é usada para quando você colocar o relatório no teu projeto.
Como você esta fazendo a conexão com o banco? utiliza a mesma classe que faz a conexão pra ti.

Tô sem exemplos aqui pra ti passar mas é mais simples do que parece.

[quote=luiscolling]Essa conexão do iReport não é usada para quando você colocar o relatório no teu projeto.
Como você esta fazendo a conexão com o banco? utiliza a mesma classe que faz a conexão pra ti.

Tô sem exemplos aqui pra ti passar mas é mais simples do que parece.[/quote]

Eu uso o hibernate, por isso assustei ter que fazer uma nova conexão com o bd,
mas isso não é problema, pois assim que a coisa aprender dessa forma tentarei
fazer pelo hibernate.
Onde coloco o arquivo .jrxml ? dentro de uma pasta específica, relatorio, ou fica dentro de web? :smiley:
Muito obrigado pela atenção e dicas, pois estava perdido.

Recomendo colocar dentro de um pacote dentro do src, na verdade só é necessário do .jasper o .jrxml server mais como fonte caso seja necessário fazer manutenção no relatório, embora seja possivel editar o .jasper.

Recomendo deixar os 2 arquivos juntos na pasta src
ou coloque dentro de WEB-INF, não deixe dentro do WebContent somente.

Que bom que pude ajudar.

abraço.

Caro Luis estou tendo um java.lang.NullPointerException nessa linha:
//Localiza o contexto da pasta onde esta localizado o .jasper String pathJasper = context.getRealPath("/ireport/") + "/";

Eu coloquei o arquivo .jasper em web/WEB-INF/ireport é preciso configurar algo em algum lugar ou informar o contexto sem colar pastas.
muito obrigado, vou continuar tentando, qq coisa posto aqui.

Você esta recebendo o context null, certo?
Acho que deveria ter um filter ou interceptor para receber ServletContext context

Uma alternativa seria

String pathJasper = session.getServletContext().getRealPath("/ireport/") + "/";

[quote=luiscolling]Você esta recebendo o context null, certo?
Acho que deveria ter um filter ou interceptor para receber ServletContext context

Uma alternativa seria

String pathJasper = session.getServletContext().getRealPath("/ireport/") + "/";

[/quote]

Caro Amigo somente consigo null. O comando acima não consegui implementar, pois session somente dá erro.
dentro de WEB-INF criei uma pasta ireport e lá coloquei o arquivo .jasper.
como deveria escrever o comando acima, pois já tentei vários:

//String pathJasper = context.getRealPath("WEB-INF/ireport");
//String pathJasper = context.getRealPath("/ireport/") + "/";
//String pathJasper = this.getServletContext().getRealPath("ireport/rel_cat.jasper");
String pathJasper = context.getRealPath("/ireport/") + "/"; 
//String pathJasper = context.getRealPath("/cantinavirtual/ireport") + "/rel_cat.jasper "; 

No servlet para chamar geraRelatorio precisa de algum parâmetro específico?
Muito obrigado

o que retorna assim

No exemplo do outro tópico ele esta usando vraptor, e deve ter um filtro ou interceptor que passa os valores do método
final ServletContext context, HttpServletRequest request, HttpServletResponse response
Sendo assim não são null pra ele.

Coloca o código completo da sua classe, e o que você esta usando de framework?

Uso Vraptor 2


Logica

import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;


import org.vraptor.annotations.Component;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Viewless; 

import br.com.cantinavirtual.dao.DaoFactory;
import br.com.cantinavirtual.modelo.Categoria_sm;
  

@Component()
@InterceptedBy({AutorizadorInterceptor.class,DaoInterceptor.class})
public class Relatorio3_smLogic {

	public Relatorio3_smLogic(DaoFactory daoFactory) {
		this.daoFactory = daoFactory;
		}
		private final DaoFactory daoFactory;
       

	@Viewless   
	public void geraRelatorio(final ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception{   	    
		
		Connection conn = (Connection) ConnectionDB.getConnection();
		/*
		 * Codigo para consultar a lista
		 */
		
		List<Categoria_sm> list = this.daoFactory.getCategoria_smDao().listatodascategoria();
		/*
		 * Final da consulta, retorna array para converter em pdf
		 */
		
		//Localiza o contexto da pasta onde esta localizado o .jasper
		String pathJasper = context.getRealPath("/ireport/") + "/"; 
		
		//Faz o mapeamento do context para levar o .jasper a conversao em bytes
		Map parametros = new HashMap();
		//parametros.put("SUBREPORT_DIR", pathJasper);
		//parametros.put("SUBREPORT_DIR", "WEB-INF/ireport");
		try {
		//Recebe a lista do array populado	
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
		//pega o ds + a conexao para ir ate o ireport para listar o array dentro do relatorio
		//JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "rel_cat.jasper",parametros, ds);
		JasperPrint impressao = JasperFillManager.fillReport(pathJasper,parametros, ds);
		//converte o relatorio em bytes gerando o pdf
		byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
		byte[] arquivo = bytes;
		
		//Tratamento para exportacao do pdf para a url do browser e o tratamento de erros.
		String nomeDoArquivo = "rel_cat.pdf";
		response.setContentType("application/x-msdownload");
		response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
		response.setContentLength(arquivo.length);
		ServletOutputStream sos = response.getOutputStream();
		sos.write(arquivo, 0, arquivo.length);
		sos.flush();
		sos.close();
		} catch (Exception e) {
		if(e.getClass().getSimpleName().equals("AbortException")){
		System.out.println("Documento cancelado");
		} else{
		System.out.println("Outros");
		}
		}
		}

Conexão com bd


public class ConnectionDB {   
	  public static Connection getConnection() throws SQLException {  
		         try {  
		             Class.forName("org.postgresql.Driver");  
		             return DriverManager.getConnection("url","user","senha");  
		         } catch (ClassNotFoundException e) {
		        		 
		             throw new SQLException(e.getMessage());  
		         }  
		     }  
		   	
	
}	

JSP

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://displaytag.sf.net" prefix="display" %>   

<%@ include file="../principal_sm/cabcantvirtual.jsp" %>

<script type="text/javascript">

$(document).ready(function(){

    function ClosedMask() {
         $('#mascara').hide();
         $('.BoxFixed').hide();
         $('body').css({ overflow: 'scroll' });
   }

 
         <h1>Categorias</h1>
         <h2>Listagem de todos as categorias de suas cantinas.</h2>

         <h3>Teste</h3>

         <div style="clear:both;"></div>

                        <div id="ferramentas">
                           <div class="right"><a class="pesquisar">Pequisar</a></div>
                           <div class="left"><a href="categoria_sm.manutformadd.logic">Adicionar Categoria</a> | <a onclick="return confirm('Serviço ainda indisponível, por favor, Aperte Cancelar !')" href="relatorio3_sm.geraRelatorio.logic" target="_blank">Imprimir Lista</a></div>
                        </div>
<display:table id="categoria_sm" class="listagem" name="${categorias}" requestURI="categoria_sm.manutlistaporescola.logic" export="true"pagesize="25">
<display:column style="width: 20px;text-align:center;"><a href="categoria_sm.manuteditar.logic?categoria_sm.id_categoria=${categoria_sm.id_categoria}"><img src="img_manut/page_edit.png"></display:column>
<display:column style="width: 20px;color: rgb(255, 255, 255); background-color: rgb(153, 153, 153);border:0px;text-align:center;" property="codcat" sortable="true" title="código"/>
<display:column property="descricao" sortable="true" title="categoria"/>
<display:column property="aux2_sm.descricao" sortable="true" title="disponível"/>
</display:table>


					


					</div>
			</div>
			</div>
<%@ include file="../principal_sm/rodcantvirtual.jsp" %>
</body>

o relatório está em web/WEB-INF/ireport/rel_cat.jasper

Sei que já estou enchendo o saco com isso, mas até agora não funcionou.
Muito obrigado

Continuando a batalha… heheheeh

Coloca no construtor assim:

public Relatorio3_smLogic(DaoFactory daoFactory, ServletContext context) {  
        this.daoFactory = daoFactory; 
        this.context = context;
         }  
         private final DaoFactory daoFactory; 
         private final ServletContext context;

Verifica se o context não vem null dessa forma, mas pegue o this.context
acho que você pode retirar aquele context do método geraRelatorio.

Uma hora temos que conseguir fazer funcionar eehehehhee

Caro Amigo luis, o problema do null acabou com a alteração que vc sugeriu.
Mas o relatório sai em branco, coloquei uns system.out.println, para ver até
onde ia, já que estava dentro de try/cath, se vc poder dar mas alguma sugestão
agradeço. veja novamente código da lógica:


@Component()
@InterceptedBy({AutorizadorInterceptor.class,DaoInterceptor.class})
public class Relatorio3_smLogic {

	public Relatorio3_smLogic(DaoFactory daoFactory,ServletContext context) {
	 this.daoFactory = daoFactory;   
	 this.context = context;  
	}    
		private final DaoFactory daoFactory;   
		private final ServletContext context; 
       

	@Viewless   
	public void geraRelatorio(final ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception{   	    
		
		Connection conn = (Connection) ConnectionDB.getConnection();
		/*
		 * Codigo para consultar a lista
		 */
		
		//List<Categoria_sm> list = this.daoFactory.getCategoria_smDao().listatodascategoria();
		List<Categoria_sm> list = null;
		/*
		 * Final da consulta, retorna array para converter em pdf
		 */
		
		//Localiza o contexto da pasta onde esta localizado o .jasper
		String pathJasper = this.context.getRealPath("/ireport/") + "/"; 
		
		//Faz o mapeamento do context para levar o .jasper a conversao em bytes
		Map parametros = new HashMap();
		 parametros.put("SUBREPORT_DIR", pathJasper);
		try {
		//Recebe a lista do array populado
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1");
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2");
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 "+pathJasper);
		//pega o ds + a conexao para ir ate o ireport para listar o array dentro do relatorio
		JasperPrint impressao = JasperFillManager.fillReport(pathJasper+"/rel_cat.jasper",parametros, ds);
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4");
		//converte o relatorio em bytes gerando o pdf
		byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
		byte[] arquivo = bytes;
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5");
		//Tratamento para exportacao do pdf para a url do browser e o tratamento de erros.
		String nomeDoArquivo = "rel_cat.pdf";
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6");
		response.setContentType("application/x-msdownload");
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7");
		response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8");
		response.setContentLength(arquivo.length);
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9");
		ServletOutputStream sos = response.getOutputStream();
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA10");
		sos.write(arquivo, 0, arquivo.length);
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11");
		sos.flush();
		System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA12");
		sos.close();
		} catch (Exception e) {
		if(e.getClass().getSimpleName().equals("AbortException")){
		System.out.println("Documento cancelado");
		} else{
		System.out.println("Outros");
		}
		}
		}

	
	
	
}  

resultado impresso:

22:07:14,468 DEBUG SessionImpl:220 - opened session at timestamp: 12557416344
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3 C:\eclipse\workspace\cantinavirtual\web\ireport/
Outros
22:07:14,953 DEBUG SessionImpl:273 - closing session
22:07:14,953 DEBUG ConnectionManager:375 - connection already null in cleanup : no action

pelo que ví a linha JasperPrint impressao = JasperFillManager.fillReport(pathJasper+"/rel_cat.jasper",parametros, ds); não roda
Muito obrigado

Caro amigo luis, consegui passar daquelu ponto.
Eu havia colocado o .jasper dentro do web/WEB-INF/ireport e
ele somente achava o caminho web/ireport, alterei o local e passou
para a próxima parada:

java.lang.NoClassDefFoundError: com/lowagie/text/pdf/FontMapper
	net.sf.jasperreports.engine.JasperExportManager.exportReportToPdf(JasperExportManager.java:183)
	br.com.cantinavirtual.logic.Relatorio3_smLogic.geraRelatorio(Relatorio3_smLogic.java:70)

Está parecendo falta de biblioteca vou continuar na batalha, muito obrigado