iReport(jr:Table) - Sumindo primeira linha

5 respostas
Ygor

Boa tarde amigos GUJeanos.
Estou passando por um problema cabeludo, ja procurei em tudo quanto é forum mas não consegui encontrar.
Creio que seja devido algum conceito que estou deixando escapar, mas, vamos a ele…

Fiz um table(jr:table) no ireport e em cada coluna coloquei um field relativo ao objeto Produto (quantidade,código,unidade,descrição).

No java eu chamo o relatório da seguinte maneira

protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

//(...)
JRBeanCollectionDataSource jrb = new JRBeanCollectionDataSource(pedido.getListProduto());
				byte[] bytes  = JasperRunManager.runReportToPdf(jasperReport, parameters,jrb);
				if (bytes != null && bytes.length > 0) { 
					response.setContentType("application/pdf");  
					response.setContentLength(bytes.length); 
					ServletOutputStream ouputStream = response.getOutputStream();
					ouputStream.write(bytes, 0, bytes.length);
					ouputStream.flush();
					ouputStream.close();
				}

O DataSourceExpression da minha table está setado para $P{REPORT_DATA_SOURCE}

O que está acontecendo com esse código, é que ao imprimir o pdf o primeiro elemento da tabela não é impresso. É como se a iteração do jr:table fosse apartir da posição 1.

Eu consegui solucionar esse problema da seguinte maneira:

ArrayList<Produto> aux = (ArrayList)pedido.getListProduto();
aux.add(0, null);
JRBeanCollectionDataSource jrb = new JRBeanCollectionDataSource(aux);

Que é justamente inserir um elemento null na posição zero.
O problema é que isto me soa um tanto quanto gambiarra, queria uma solução mais elegante, mas não faço a minima idéia do que seja

5 Respostas

Ygor

Alguém?

Qualquer idéia sera muito bem vinda!

G

Boa tarde,
Não tenho muita experiência com ireport e estou com o mesmo problema. Você conseguiu uma solução?

Obrigado

Ygor

Olá gilsonpolito,

Pois então, a unica solução parcial que consegui encontrar foi aquela que postei no tópico, que é inserir um elemento null no indice 0.
Eu estava procurando por algo mais elegamente, por que isso me cheira algum conceito deixado de lado, mas desisti de procurar e deixei assim mesmo.
Funciona perfeitamente…mass…Gambiara pra que te quero rsrsrsrs

G

Olá Ygor,
Achei o problema… depurando minha aplicação pude perceber que o métodopublic boolean next() throws JRException é chamado duas vezes antes da primeira chamada ao métodopublic Object getFieldValue(JRField field) throws JRException Portanto verifique se você está fazendo como a maioria dos exemplos que vi nas minhas andanças pela internet que realizaiterator.next(); dentro do métodopublic boolean next() throws JRException e altere este método parapublic boolean next() throws JRException { return iterator.hasNext(); } e façaiterator.next();dentro do métodopublic Object getFieldValue(JRField field) throws JRException
Acho que é isto…pelo menos no meu caso resolveu. Qualquer coisa mande o seu código para podermos analisar.
Abraços

Ygor

Olá gilsonpolito,

Mas nesse caso então eu deveria trocar JRBeanCollectionDataSource para um customCollectionDataSource que sobre escrevesse estes métodos, está correto?
Eu tentei sobrescrever esses métodos na hora da instanciação, porém o atributo iterator não é visivel, pelo jeito vou ter que cirar um dataSource mesmo

Abraços

Criado 3 de novembro de 2010
Ultima resposta 11 de nov. de 2010
Respostas 5
Participantes 2