JSF und JasperReport Problem

Peregrin

Mitglied
Hallo ich habe da ein kleines Problem und brauche mal eure Hilfe. Und zwar habe ich folgenden Code

Code:
ServletContext servCont = ((ServletContext)FacesContext.getCurrentInstance().
getExternalContext().getContext());

HttpServletResponse response = (HttpServletResponse)(FacesContext.getCurrentInstance().
getExternalContext().getResponse());

JasperReport jasperReport;
JasperPrint jasperPrint;

FacesContext fc = FacesContext.getCurrentInstance();

HashMap<String, String> parameter = new HashMap<String, String>();


publicvoid drucken_neu(ActionEvent ev) {

response.setContentType("application/pdf");
response.setHeader("Content-disposition", "Attachment; filename = .pdf");

try {
jasperReport = JasperCompileManager.compileReport(servCont.getRealPath("/reports/neu.jrxml")); 
jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, DB2Connect.getConnection());

byte[] pdfFile= JasperExportManager.exportReportToPdf(jasperPrint);

response.setContentLength(pdfFile.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(pdfFile, 0, pdfFile.length);
ouputStream.flush();
ouputStream.close();

fc.responseComplete(); 
} 
catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} 
catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
 
}

Und zwar gibt es da folgendes Problem: Das erste mal drucken klappt ohne Probleme, sobald ich aber ein zweites mal drucken will, bekomme ich folgende Fehlermeldung:
java.lang.IllegalStateException: FacesContext already released.

Der Debugger meldet mir das er in der oben rotmarkierten Zeile rausspringt. Muss ich noch was zusätzlich angeben oder kann mir einfach einer erklären woran das liegt ?
 
Natürlich wie immerm 5 min nach dem Eintrag findet man nach 2 Tagen Suchen den Fehler :rolleyes:.

Lösung ist, das ich den Aufruf

Code:
ServletContext servCont = ((ServletContext)FacesContext.getCurrentInstance().
getExternalContext().getContext());

HttpServletResponse response = (HttpServletResponse)(FacesContext.getCurrentInstance().
getExternalContext().getResponse());

JasperReport jasperReport;
JasperPrint jasperPrint;

FacesContext fc = FacesContext.getCurrentInstance();

HashMap<String, String> parameter = new HashMap<String, String>();

mit in die Methode schreiben muss.
 

Neue Beiträge

Zurück