Problemas ao mandar lista pro report

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)

up

Ola,

Como esta passando a lista você não usara mais o component table, e sim um subrelatorio.
A imagem que esta usando tambem tem que ser passado como parametro ja que nao vai existir o caminho: D:\sic\web\img\logo.png no server.
A lista nao é passada como um parametro mais como um field assim:

JasperPrint reportToPrint = JasperFillManager.fillReport(isReport, parametros, itensJRBean);

No subrelatorio os properties:

connection type: use datasource 
data souce expression: new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{nomeDaLista})