Oi pessoal.
Preciso da ajuda da comunidade.
Estou gerando um relatorio a partir de .jasper em minha aplicação Web, estou trabalhando com JSF no netbeans.
O meu problema é que não consigo exibir o relatório em outra página.
A minha página JSP esta chamando o método gerarHistorico.
Abaixo estou colocando o meu Manager Bean.
public class ActionRelatorio{
private static Connection con = null;
private static String driver = "com.mysql.jdbc.Driver";
private static String endereco = "jdbc:mysql://localhost/sim";
private static String user = "root";
private static String pass = "root";
//Lista de paciente a ser exibida
private ListDataModel listaParturiente;
//Nome para consulta
private String nomeConsulta;
//Objeto do tipo PacienteFacade para realizar trasação de salvar atualizar etc
ParturienteDAO pacDAO;
private java.util.Date dt_inicial;
private java.util.Date dt_final;
/**
* <p>Prefixo do nome do recurso para relatórios compilados.</p>
*/
//private static final String PREFIX = "/WebSim/WEB-INF/classes/org/maternidade/relatorios/";
private static final String SUB = "C:/Application of Developed/IDEs/netbeans-5.5.1/workspace/WebSim/src/java/org/maternidade/relatorios/";
/**
* <p>Sufixo do nome do recurso para relatórios compilados.</p>
*/
private static final String SUFFIX = ".jasper";
/** Creates a new instance of ActionReport */
public ActionRelatorio() {
this.pacDAO = new ParturienteDAO();
this.setNomeConsulta(null);
this.setListaParturiente(null);
}
public String gerarHistorico(){
if(listaParturiente != null){
Parturiente part = (Parturiente)getListaParturiente().getRowData();
Map<String,Object> params = new HashMap<String,Object>();
params.put("idParturiente",part.getIdPac());
try{
conexao();
jasperReport("historicoParturiente",params);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
return null;
}
public void gerarRelatorioParto(){
Map<String,Object> params = new HashMap<String,Object>();
params.put("data_inicio",getDt_inicial());
params.put("data_fim",getDt_final());
try{
conexao();
jasperReport("partoRelatorio",params);
}catch(Exception e){
System.err.println(e.getMessage());
}
}
public void jasperReport(String nome, Map params){
try {
byte[] pdf = JasperRunManager.runReportToPdf(SUB+nome+SUFFIX, params, con);
FacesContext faces = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse)faces.getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setContentLength(pdf.length);
response.setHeader("Content-disposition", "inline");
response.setHeader("Cache-Control", "cache, must-revalidate");
response.setHeader("Pragma", "public");
ServletOutputStream out = response.getOutputStream();
out.write(pdf);
StateManager stateManager = (StateManager)faces.getApplication().getStateManager();
stateManager.saveSerializedView(faces);
faces.responseComplete();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
System.out.println(e.getMessage());
throw new FacesException(e);
}
try {
con.close();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
//Cria a conexao
public void conexao(){
try{
if (con == null || con.isClosed()){
Class.forName(driver);
con = DriverManager.getConnection(endereco,user,pass);
}
}catch(Exception e){
System.err.println("Não foi possível conectar ao banco ->");
System.err.println(e.getMessage());
}
}
//Função para realizar busca de Parturiente
public String pesquisarParturiente(){
if(this.getNomeConsulta() == null || this.getNomeConsulta().length() == 0){
return null;
}else {
//Lista de Parturiente.
List<Parturiente> lista = pacDAO.buscarParturiente(getNomeConsulta());
//Verifica se não foi encontrado parturiente.
if(lista.size() == 0){
System.out.println("Parturiente não encontrada. Verificar como mostrar um resposta na tela");
return null;
}
//Seta a lista de parturiente encontrado.
setListaParturiente(new ListDataModel(lista));
}
return null;
}
}
Por favor me ajudem…irei deventer o este projeto no sábado.