Pessoal sou novo com esse brinquedo ai, estou com o relatório todo em ordem funcionando quando executo pelo ireport, e pel aplicação tbem, só que está uma query estatica dentro do ireport, tipo select * from aluno where codigo=2 como seria para passar esse código via aplicação, uma forma de concatenar não sei, alguem pode me ajudar? desde já agradeço
:roll:
Query IReport
12 Respostas
no ireport, existem os parametros, que podem ser passados via Map
perceba no seu codigo java, que quando vc cria o relatorio, existem metodos do jasperreports que recebem um objeto
parameters do tipo Map
vc pode cria-lo assim:
Map param = new HashMap();
param.put("codigo", 2);
la dentro do relatorio vc cria um parametro chamado codigo, do tipo Integer
e a sua query fica assim:
select * from aluno where codigo=$P{codigo}
Agora foi Obrigado.
Outra coisa, como faço pra passar o mesmo pra meu subrelatório?
dentro do Relatorio click com o botão direito no subRelatorio e selecione Properties, depois vai na aba Subreport(Other) click em add e insira no campo “Subreport parameter name” o valor parametro_codigo e no campo “Default Value Expression” insira no campo $P{parametro_codigo}
ficando assim
parametro_codigo $P{parametro_codigo}
la dentro do subRelatorio vc cria um parametro chamado codigo, do tipo Integer
qualquer duvida é soh falar ae…
no ireport, existem os parametros, que podem ser passados via Mapperceba no seu codigo java, que quando vc cria o relatorio, existem metodos do jasperreports que recebem um objeto
vc pode cria-lo assim:
parameters do tipo MapMap param = new HashMap(); param.put("codigo", 2);la dentro do relatorio vc cria um parametro chamado codigo, do tipo Integer
e a sua query fica assim:select * from aluno where codigo=$P{codigo}
Eae lauronolasco, td bem?
Estou com um problema desses. O meu método está assim:public String imprimirRelatorio() {
// parametros
Map<String, Long> param = new HashMap<String, Long>();
param.put("codOg", this.orgaogestor.getCod_orgaogestor());
saida = null;
System.out.println("metodo de impressao");
String jasper = getDiretorioReal("/jasper/orgaogestor2.jasper");
Connection conexao = null;
try {
// Abro a conex�o com o banco que ser� passada para o JasperReports
conexao = new Conexao().getConexao();
JRResultSetDataSource jrds = new JRResultSetDataSource(
getResultSet(conexao));
// Mando o jasper gerar o relat�rio
JasperPrint print = JasperFillManager.fillReport(jasper, param,
jrds);
// Gero o PDF
preenchePdf(print);
System.out.println("pdf gerado");
} catch (Exception e) {
e.printStackTrace();
System.out.println("erro: " + e);
} finally {
try {
// // Sempre mando fechar a conex�o, mesmo que tenha dado erro
if (conexao != null)
conexao.close();
} catch (Exception e) {
}
}
return "exibeRelatorio";
}
<rich:dataTable value="#{orgaogestorHandler.orgaosGestoresByNome}" var="f" rendered="#{not empty orgaogestorHandler.orgaosGestoresByNome}" rows="5" id="orgaosGestoresByNome">
//...
<h:column>
<f:facet name="header">
<h:outputText value="Relatório"/>
</f:facet>
<center>
<h:commandLink target="_blank" value="PDF" id="pdf" action="#{orgaogestorHandler.imprimirRelatorio}"/>
<f:param id="codOg" name="cod" value="#{f.cod_orgaogestor}"/>
</center>
</h:column>
/...
A minha rich:datatable me retorna uma list com os resultados, e cada resultado tem um id na tabela... preciso que seja capturado o id da linha que eu cliquei para que me retorne somente o relatorio daquela linha, o que nao está acontecendo...
Alguma dica??
Vlw
No java web vc tem de usar um servlet pra retornar o arquivo pro cliente.
Veja este exemplo:
http://javafree.uol.com.br/artigo/868482/Relatorio-iReport-+-Servlet-+-JSP.html
No java web vc tem de usar um servlet pra retornar o arquivo pro cliente.
Veja este exemplo:http://javafree.uol.com.br/artigo/868482/Relatorio-iReport-+-Servlet-+-JSP.html
O problema é que eu já uso a servlet do Faces, e provavelmente, dará pau na aplicação…

Outra alternativa?
Não da pau.
Vc só precisa adicionar no seu web.xml esse trecho:
<servlet>
<servlet-name>ServletRelatorio</servlet-name>
<servlet-class>controller.ServletRelatorio</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletRelatorio</servlet-name>
<url-pattern>/servletRelatorio</url-pattern>
</servlet-mapping>
Para visualizar o relatório, vc põe um link para:
http://localhost:8080/NomeDaAplicacao/servletRelatorio?parametro1=x¶metro2=y
Não da pau.
Vc só precisa adicionar no seu web.xml esse trecho:
<servlet> <servlet-name>ServletRelatorio</servlet-name> <servlet-class>controller.ServletRelatorio</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletRelatorio</servlet-name> <url-pattern>/servletRelatorio</url-pattern> </servlet-mapping>Para visualizar o relatório, vc põe um link para:
http://localhost:8080/NomeDaAplicacao/servletRelatorio?parametro1=x¶metro2=y
Rapá, só agora eu vi q tu é meu conterrâneo!! hehheehe. Vou testar aqui e depois te falo. Vlw.
Vc tbm é de Conquista?
Mora onde?
Vc tbm é de Conquista?Mora onde?
bvb
msn!!!
public String imprimirRelatorio2(ActionEvent event) {
// pegar objeto com actionEvent
UIComponent link = event.getComponent();
UIParameter parametro = (UIParameter) link.findComponent("printCod");
Long id = (Long) parametro.getValue();
// parametros
Map param = new HashMap();
param.put("codOg", id);
System.out.println("codOg= " + id); //PARA VER SE REALMENTE PEGA O ID DO OBJETO
saida = null;
System.out.println("metodo de impressao");
String jasper = getDiretorioReal("/jasper/orgaogestor2.jasper");
Connection conexao = null;
try {
// Abro a conex�o com o banco que ser� passada para o JasperReports
conexao = new Conexao().getConexao();
JRResultSetDataSource jrds = new JRResultSetDataSource(
getResultSet(conexao));
// Mando o jasper gerar o relat�rio
JasperPrint print = JasperFillManager.fillReport(jasper, param,
jrds);
// Gero o PDF
preenchePdf(print);
System.out.println("pdf gerado");
} catch (Exception e) {
e.printStackTrace();
System.out.println("erro: " + e);
} finally {
try {
// // Sempre mando fechar a conex�o, mesmo que tenha dado erro
if (conexao != null)
conexao.close();
} catch (Exception e) {
}
}
return "exibeRelatorio";
}
<h:commandLink value="PDF" id="pdf" actionListener="#{orgaogestorHandler.imprimirRelatorio2}"/>
<f:param id="printCod" name="cod" value="#{f.cod_orgaogestor}"/>
Hibernate:
select
...
codOg= 30
metodo de impressao
getDireitorioReal
conexao relatorio
getDireitorioReal
getContextPath
pdf gerado
Como pode ver, ele carrega o método, passa o parametro mas na prática, naum acontece nada... o relatorio naum é exibido, e na página acontece um refresh.
O que pode ser???
Agradeço.