Caros desenvolvedores, estou tentando gerar um relatório para web, abaixo está meu código.
Meu ManagedBean que chama o DAO.
@ManagedBean
@RequestScoped
public class RelatorioEntradas implements Serializable{
private RelatorioDAO dao;
private RelatorioEntrada entradas;
public RelatorioEntrada getEntradas() {
return entradas;
}
public void setEntradas(RelatorioEntrada entradas) {
this.entradas = entradas;
}
public RelatorioEntradas() {
entradas = new RelatorioEntrada();
System.out.println("Relatório Entrada Criado");
}
public void gerarRelatorio() throws ClassNotFoundException, SQLException {
Date dataI = entradas.getDataInicial();
Date dataF = entradas.getDataFinal();
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
ServletContext context = (ServletContext) externalContext.getContext();
String arquivo = context.getRealPath("WEB-INF/relatorios/entrada.jasper");
HashMap parametros = new HashMap();
//parametros.put("dataInicial",dataI);
//parametros.put("dataFinal", dataF);
dao = new RelatorioDAO();
JRDataSource jrRS = new JRResultSetDataSource(dao.EntradasResultSet(dataI, dataF));
gerarRelatorioWeb(jrRS, parametros, arquivo);
}
private void gerarRelatorioWeb(JRDataSource jrRS, Map<Object, Object> parametros, String arquivo) {
ServletOutputStream servletOutputStream = null;
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
try {
servletOutputStream = response.getOutputStream();
JasperRunManager.runReportToPdfStream(new FileInputStream(new File(arquivo)), response.getOutputStream(), parametros, jrRS);
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
//context.getApplication().getStateManager().saveView(context);
context.renderResponse();
context.responseComplete();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Meu método do DAO
public ResultSet EntradasResultSet(Date dataInicial, Date dataFinal) {
SimpleDateFormat out = new SimpleDateFormat("yyyy/MM/dd");
String dataI = out.format(dataInicial);
String dataF = out.format(dataFinal);
try {
String query = ("SELECT entraproduto.`qtde_entrada` AS entraproduto_qtde_entrada,entraproduto.`data_entrada` AS entraproduto_data_entrada,produto.`pro_Nome` AS produto_pro_Nome FROM `produto` produto INNER JOIN `entraproduto` entraproduto ON produto.`pro_ID` = entraproduto.`produto_pro_ID` WHERE entraproduto.`data_entrada` BETWEEN ('" + dataI + "') AND ('" + dataF + "')");
System.out.print(query);
rs = getStatement().executeQuery(query);
} catch (Exception e) {
e.printStackTrace();
}
return rs;
}
Ele gera o relatório, mas o mesmo aparece em branco, sem nenhuma informação do banco.Quando executo dá um erro de -> GRAVE: java.lang.NullPointerException.
Se alguém puder me ajudar fico bem grato!!