Olá, estou tentando emitir um relatório mas estou com dificuldades em enviar a minha lista pra table no jasper report, é um projeto JSP, uso o PostgreSQL e Netbeans IDE. Ao abrir o relatório no navegador fica em branco. A lista está sendo preenchida corretamente, o problema é mandar e pegar os valores no report. Agradeço desde já.
Servlet
Connection conn = null;
Integer idPessoa = Integer.parseInt(request.getSession().getAttribute("idPessoa").toString());
String relatorio = "reports/relatorioDespesas2.jasper";
ServletOutputStream servletOutputStream = response.getOutputStream();
try {
Date dataInicial = Conversao.converterStringToDate(request.getParameter("data1"));
Date dataFinal = Conversao.converterStringToDate(request.getParameter("data2"));
String idTipoDespesa = request.getParameter("idDespesa");
List<ItensDespesa> listDespesa = new ArrayList<>();
ItensDespesaDAOImpl dao = new ItensDespesaDAOImpl();
listDespesa = dao.listarRelatorio(idPessoa, dataInicial, dataFinal, idTipoDespesa);
//Converter List pra Java Collection
JRBeanCollectionDataSource itemsJRBean = new JRBeanCollectionDataSource(listDespesa);
Map<String,Object> parametros = new HashMap<String,Object>();
parametros.put("itemDataSource", itemsJRBean);
System.out.println("itemJRBean: "+itemsJRBean);
parametros.put("data_inicial", dataInicial.toString());
parametros.put("data_final", dataFinal.toString());
InputStream inputStream = getServletConfig().getServletContext().getResourceAsStream(relatorio);
conn = ConnectionFactory.conectar();
response.setContentType("application/pdf");
JasperRunManager.runReportToPdfStream(inputStream, servletOutputStream, parametros, conn);
} catch (Exception ex) {
System.out.println("Problemas ao gerar relatório de Despesa! Erro: " + ex.getMessage());
ex.printStackTrace();
} finally {
servletOutputStream.flush();
servletOutputStream.close();
}
ItensDespesaDAOImpl
public List<ItensDespesa> listarRelatorio(Integer idPessoa, Date dataInicial, Date dataFinal, String idTipoDespesa) throws Exception {
PreparedStatement stmt = null;
ResultSet rs = null;
List<ItensDespesa> lista = new ArrayList<ItensDespesa>();
try {
String sql = "SELECT i.*, d.nome_despesa, p.nome_pessoa, pe.nome_pessoa as nome_cooperativa, pe.logradouro_endereco as logradouro_cooperativa, \n"
+ "pe.numero_endereco as numero_endereco_cooperativa, pe.bairro_endereco as bairro_cooperativa, pe.cep as cep_cooperativa, \n"
+ "cid.nome_cidade as nome_cidade_cooperativa, coop.cnpj as cnpj_cooperativa FROM itens_despesa i inner join despesa d on i.id_despesa=d.id_despesa \n"
+ "left join pessoa p on p.id_pessoa=id_cooperado left join movimentacao m on m.id_movimentacao=i.id_movimentacao inner join pessoa pe on pe.id_pessoa=d.id_pessoa \n"
+ "inner join cidade cid on cid.id_cidade=pe.id_cidade inner join cooperativa coop on coop.id_pessoa=pe.id_pessoa\n"
+ "WHERE d.id_pessoa=? and i.data_despesa >= ? AND i.data_despesa <= ?";
StringBuilder sb = new StringBuilder();
sb.append(sql);
if (!idTipoDespesa.equals("")) {
String sqlIdTipoDespesa = " and i.id_despesa=" + Integer.parseInt(idTipoDespesa);
sb.append(sqlIdTipoDespesa);
}
String orderBy = " ORDER BY i.data_despesa, i.descricao, i.valor;";
sb.append(orderBy);
stmt = this.conn.prepareStatement(sb.toString());
stmt.setInt(1, idPessoa);
stmt.setDate(2, new java.sql.Date(dataInicial.getTime()));
stmt.setDate(3, new java.sql.Date(dataFinal.getTime()));
if (!idTipoDespesa.equals("")) {
stmt.setInt(4, Integer.parseInt(idTipoDespesa));
}
rs = stmt.executeQuery();
while (rs.next()) {
ItensDespesa itens = new ItensDespesa();
itens.setIdItensDespesa(rs.getInt("id_itens_despesa"));
itens.setDataDespesa(rs.getDate("data_despesa"));
itens.setDescricao(Conversao.converterSoPrimeiraLetraMaiuscula(rs.getString("descricao")));
itens.setValor(rs.getDouble("valor"));
Despesa despesa = new Despesa();
despesa.setIdDespesa(rs.getInt("id_despesa"));
despesa.setNomeDespesa(Conversao.converterPrimeiraLetraMaiuscula(rs.getString("nome_despesa")));
Pessoa cooperativa = new Pessoa();
cooperativa.setNomePessoa(rs.getString("nome_cooperativa"));
cooperativa.setLogradouroEndereco(rs.getString("logradouro_cooperativa"));
cooperativa.setNumeroEndereco(rs.getInt("numero_endereco_cooperativa"));
cooperativa.setBairroEndereco(rs.getString("bairro_cooperativa"));
cooperativa.setCep(rs.getString("cep_cooperativa"));
cooperativa.setCep(rs.getString("cep_cooperativa"));
Cidade cidade = new Cidade();
cidade.setNomeCidade(rs.getString("nome_cidade_cooperativa"));
cooperativa.setCidade(cidade);
Cooperativa coop = new Cooperativa();
coop.setCnpj(rs.getString("cnpj_cooperativa"));
despesa.setPessoa(cooperativa);
itens.setDespesa(despesa);
if (rs.getInt("id_cooperado") != 0) {
Pessoa cooperado = new Pessoa();
cooperado.setIdPessoa(rs.getInt("id_cooperado"));
cooperado.setNomePessoa(Conversao.converterPrimeiraLetraMaiuscula(rs.getString("nome_pessoa")));
itens.setCooperado(cooperado);
}
lista.add(itens);
}
} catch (Exception e) {
System.out.println("Erro ao listar ItensDespesaDAOImpl. Erro: " + e.getMessage());
e.printStackTrace();
} finally {
ConnectionFactory.closeConnection(conn, stmt, rs);
}
return lista;
}
Abaixo o meu relatório Jasper, ja estou vinculando as variaveis e tal. Tem um table onde serão exibidos os itens da lista. No servlet mando o parametro chamado itemDataSource q é a lista para o report.
relatorioDespesas2.jrxml (13,1 KB)