[RESOLVIDO] - IREPORT e JRBeanCollectionDataSource

9 respostas
C

Boa noite galera.

Alguém poderia me ajudar??

Estou tentando que gerar um relatório em pdf, mas não estou tendo resultado.

Estou utilizando o JRBeanCollectionDataSource. Quando passo um valor vazio (null) ele gera o pdf belezinha, ow seja em branco, mas executa. Quando passo uma list, ele não executa e dá excessão.

Segue trecho do código:

JRBeanCollectionDataSource DS = new JRBeanCollectionDataSource(relProd);

String pathJasper = sc.getServletContext().getRealPath(WEB-INF/relatorios/producao) + /;

Map parameters = new HashMap();

parameters.put(PathRelProducao, pathJasper + relProducao.jasper);

try {

byte[] bytes = JasperRunManager.runReportToPdf(pathJasper + relProducao.jasper, parameters, DS); [color=red]//Local onde ocorre o erro [/color]

response.setContentType(application/pdf);

response.setHeader(Content-disposition, filename=RelProducao.pdf””);

response.setContentLength(bytes.length);

servletOutputStream.write(bytes, 0, bytes.length);

servletOutputStream.flush();

servletOutputStream.close();

FacesContext.getCurrentInstance().renderResponse();

FacesContext.getCurrentInstance().responseComplete();

}

A pergunta é,

existe alguma configuração específica no IREPORT, para utilização do JRBeanCollectionDataSource???

Detalhe,

Quando faço depuração do programa, consigo enxergar a lista gerada na variável “relProd”.

9 Respostas

L

mas qual q excessao ??
No ireport vc deve ter para os campos da lista de relProd os fields correspondentes.

C

Bom dia!

no Ireport os campos estão criados. Eu já fiz funcionar com JSP, mas utilizando ResultSet, mas estou tendo problemas ao utilizar JRBeanCollectionDataSource.

Utilizando JRBeanCollectionDataSource, eu preciso criar alguma conexão no Ireport? Como ficaria os meus campos no Ireport, $F{campo bean}, ou teria uma configuração específica para o JRBeanCollectionDataSource com os campos?

L

nuam precisa configurar dataSource no ireport,o que vc precisa saber e que se vc vai passar uma colecao de beans ex:bean Teste e no bean teste vc tem os campos
id e nome lah no seu .jasper no ireport vc tera que ter exatamente os fields criados com estes mesmos nomes um field id e um field nome com seus respectivos tipos correspondentes.

posta a exception ai que fica mais facil de ajudar.

C

Opa!!!

Segue a exception printStackTrace:

“(net.jasperreports.engine.JRException)net.jasperreports.engine.JRException: error retrieving field value from bean: id”

O estranho é q os campos que preciso para o relatório são: dataprod, site, valorprodsite, moedas, envelopes e obs. Esses fields, são justamente os que estão configurados no meu jasper. Ou seja, o campo id, não será apresentado no relatório.

Estou usando o Ireport 0.4.0

Abraços.

L

Mas e a lista que vc esta passando? ela deve conter op campo id naum e mesmo?
tdos os atributos que estao na sua lista que vc passa da aplicacao devem estar no jasper tambem, se vc precisa soh de alguns campos crie um VO(Value Object) e coloque os dados nele e mande ele para o jasper.
Digamos que na sua lista vc tenha
Id
Nome
Sobrenome
idade
sexo

no jas per vc tera que ter exatamente tds estes campos como fields.
Se vc que apresentar apenas
Nome e sexo
crie um vo com os atributos nome e sexo.
faca um loop pela sua lista e set os dados no vo e mande uma lista de VO.

T

amigao o erro parece estar bem claro. em sua lista de objetos não existe um chamado ID. e no relatório vc ta pedindo um $F{ID} que nao existe.

C

Galera, a parada funfou aki!!!

O que estava travando a geração do relatório era simlesmente um arquivo .jasper(antigo), em um caminho(antigo). Por isso, todas as vezes q eu alterava o arquivo atual, e o atualizava no path certo dava erro, porque estava buscando e um caminho diferente.

Agora, preciso de uma orientação de vcs. No meu bean, tenho:
id tipo Long;

nome tipo String;

site tipo Site;

E preciso passar para o meu relatório da seguinte maneira:

id: 1
Nome: Teste
Site: Goiânia

Só que quando gero tá aparecendo assim:

id:1
Nome:Teste
Site:1

O campo site é um objeto do Tipo Site, sendo ele é uma chave estrangeira. Como faço no ireport para referenciar o campo site pelo nome, e não pelo id???

$F{site}.getNome()

Seria mais ou menos isso ae acima???

Abraços.

C

Salve Salve a todos!!!

Enfim consegui resolver a segunda parte do problema. Agora tudo está rodando redondinho!!!rsrsrsrsrsrs

Galera,

Realmente como foi dito por alguns colegas, não há nenhuma necessidade de criar alguma conexão no Ireport quando utilizado o JRBeanCollectionDataSource. Os campos coletados no BD, não necessita de todos estarem configurados no Ireport, mas há a necessidade de estarem configurados da mesma maneira. Pra ser mais claro, vai um exemplo, suponhamos que seja realizada uma pesquisa no BD onde há campos: ID, NOME, ENDERECO, TELEFONE e CONTATO. No Ireport, caso necessite de fazer um relatório somente contendo NOME, ENDERECO, TELEFONE e CONTATO, não há problema nenhum, somente os campos criados no Ireport devem estar EXATAMENTE igual ao configurado no Bean.

Outro detalhe interessante, e o q estava me travando, era trazer do banco de dados um dado diferente do seu ID, quando se tratar de uma chave estrangeira, tipo:

tabela: CIDADE
campos: id(Long), nome(String), uf(String)

tabela: TESTE
campos: id(Long), nome(String), cidade(CIDADE)

Quando é realizada uma pesquisa pra gerar o relatório de teste, o campo cidade teria que aparecer o nome da cidade, e não seu id.

No Ireport cria-se um campo, no menu view–>field, no Textfield Class, coloca-se o pacote(pakage) da classe cidade, ex.: negocio.entidade.Cidade. Depois é só inserir um campo Textfield no relatório, configurá-lo em Textfield Expression Class como java.lang.String e em Textfield Expression colocar a expressão: $F{CIDADE}.getNome()

Se necessário, crie um .jar do projeto, e adicione no classPath do Ireport.

Fica aí, a minha solução, talvez ajude alguém!!!

Valeu galera, muito obrigado a todos que contribuíram, e sugeriram para a solução.

G

CURIOSO_GYN

Estou Exatamente com esse problema cara, poderia me ajudar?

Criado 24 de agosto de 2010
Ultima resposta 20 de ago. de 2013
Respostas 9
Participantes 4