Olá para todos, já faz um tempo que estou pesquisando sobre isso, eu to fazendo um relatório de despesas e receitas nele eu chamo dois subrelatórios, no ireport funciona normalmente, mas quando tento exibir no servlet aparece o relatório principal e não os sub, achei um tópico que falava para criar um hashmap e nele carregar os parâmetros de onde se encontram o subrelatório, mas não funcionou.
No meu servlet eu carrego o resultset no relatório principal e nesse relatório ele passa os parâmetros para os sub para q eles possam compilar.
Código Servlet sem parametro:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletOutputStream outputStream = response.getOutputStream();
Connection conn = null;
Statement stm = null;
ResultSet rs= null;
String sql= request.getParameter("sql");
String nomeRelatorio = request.getParameter("relatorio");
Map parameterMap = new HashMap();
JRResultSetDataSource jrRS = null;
byte[] bytes = null;
try{
Class.forName("com.mysql.jdbc.Driver");
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/sgf","root","123456");
stm = (Statement) conn.createStatement();
rs = stm.executeQuery(sql);
jrRS = new JRResultSetDataSource(rs);
}
catch(Exception e){
System.out.println(e.getMessage());
}
try{
InputStream url = this.getClass().getClassLoader().getResourceAsStream("/web/relatorios/"+nomeRelatorio+".jasper");
JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(url);
bytes = JasperRunManager.runReportToPdf(relatorioJasper, parameterMap,jrRS);
}
catch(Exception e){
System.out.println("erro:"+e.getMessage());
}
if (bytes != null && bytes.length > 900) {
response.setContentType("application/pdf");
outputStream.write(bytes, 0 , bytes.length);
outputStream.flush();
outputStream.close();
}else{
outputStream.flush();
outputStream.close();
JOptionPane.showMessageDialog(null, "Nada encontrado tente denovo.","Informação: ", JOptionPane.INFORMATION_MESSAGE);
}
}
Agradeço desde já, até mais;
[email removido]