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