Bom dia pessoal.
Criei meus relatórios no iReport, no entanto, quando chamado o relatório pela minha aplicação, o relatório é exibido faltando 1 registro, Alguém tem idéia de porque isto ocorre?
Classe DAO
public class RelatoriosDAO extends DataBaseUtil {
private static final long serialVersionUID = 1L;
public RelatoriosDAO() {
super();
}
...
public ResultSet getrptInfNutriCardapio() throws SQLException, ClassNotFoundException {
PreparedStatement ps = (PreparedStatement) getPreparedStatement("SELECT * FROM VW_INF_NUTRI_CARDAPIO ORDER BY MODALIDADE_CARDAPIO, CARDAPIO");
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
rs.close();
ps.close();
}
return rs;
}
}
Bean
public class RelatoriosFace extends DataBaseUtil {
String saida;
String nomeRelat;
RelatoriosDAO rptDAO = new RelatoriosDAO();
int idPeriodoCard;
...
//Método que retorna o caminho completo de um arquivo ou pasta da aplicação.
private String getDiretorioReal(String diretorio) {
HttpSession session = (HttpSession)
FacesContext.getCurrentInstance().getExternalContext().getSession(false);
return session.getServletContext().getRealPath(diretorio);
}
//Método para retornar o nome da aplicação.
private String getContextPath() {
HttpSession session = (HttpSession)
FacesContext.getCurrentInstance().getExternalContext().getSession(false);
System.out.println(session.getServletContext().getContextPath());
return session.getServletContext().getContextPath();
}
// Metodo que gera o relatório em pdf
private void preenchePdf(JasperPrint print) throws JRException {
// Pego o caminho completo do PDF desde a raiz
saida = getDiretorioReal("/pdf/" + nomeRelat + ".pdf");
System.out.println(saida);
// Exporto para PDF
JasperExportManager.exportReportToPdfFile(print, saida);
/*
* Jogo na variável saída o nome da aplicação mais o
* caminho para o PDF. Essa variável será utilizada pela view
*/
saida = getContextPath() + "/pdf/" + nomeRelat + ".pdf";
System.out.println(saida);
}
...
public String geraRelatorioPassandoResultSet() {
saida = null;
String jasper = getDiretorioReal("/jasper/" + nomeRelat + ".jasper");
try {
// Gero o ResultSet que será enviado a partir da conexão aberta
...
if (nomeRelat.equals("rptInfNutriCardapio")){
System.out.println("rptInfNutriCardapio");
JRResultSetDataSource jrsds = new JRResultSetDataSource(rptDAO.getrptInfNutriCardapio());
// Mando o jasper gerar o relatório
JasperPrint print = JasperFillManager.fillReport(jasper, null, jrsds);
// Gero o PDF
preenchePdf(print);
System.out.println("rptInfNutriCardapio " + saida);
}
} catch (Exception e) {
e.printStackTrace();
}
return "gotoRelatorios";
}
}
Gero o relatório em PDF e exibo em uma pagina relatorioViewer.
Meu select retorna 9 registros, no entanto, quando gero o relatório pela aplicação são exibidos 8 registros. Quando executo o relatório diretamente pelo iReport, todos os 9 registros são exibidos.
Att:
José Luiz