Firefox 4 и IE9 не будут открывать мои сгенерированные JasperReports в приложении JSF - PullRequest
1 голос
/ 02 мая 2011

Я разрабатываю приложение Java EE (JSF 2 + richfaces 3.3.3 + JasperReports 3.7.1 + SSL) Я проверил свое приложение с Chrome, и оно работает. Но с Firefox 4 (он отлично работает с firefox 3) и IE9, PDF, созданный с помощью JasperReports, не откроется на новой странице:

это мои коды:

<h:form id="forme2" target="_blank">
                    <h:commandButton
                        id="printBtn"
                        image="../IMAGES/print.png"
                        value="Open PDF"
                        action="#{prtf.openPDF}">
                    </h:commandButton>
</h:form>

public String openPDF() {
        // Prepare.
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExternalContext externalContext = facesContext.getExternalContext();
        HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
        Connection connection = null;
        try {
            connection = getConnection();

            Map parameters = new HashMap();
            parameters.put("num_cpt", cpt.getNumCpt());

            JasperPrint jasperPrint;
                jasperPrint = JasperFillManager.fillReport(new FileInputStream(new File("C:\\JasperReports\\" + "portefeuille" + ".jasper")), parameters, connection);

            JRPdfExporter exporter = new JRPdfExporter();
            exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);
            exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, response.getOutputStream());
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "inline;filename=" + cpt.getLibCpt().replace(" ", "_") + "_Portefeuille.pdf");

            exporter.exportReport();

            response.getOutputStream().flush();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            facesContext.responseComplete();
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

У вас есть идеи, как решить мою проблему?

UPDATE1: когда я удалил атрибут target = "_ blank" из моего тега h: form, он отлично работал в IE9, но все еще не работает в firefox 4

1 Ответ

0 голосов
/ 03 мая 2011

Попробуйте добавить следующий код перед экспортом:

response.setHeader("Pragma", "cache");
response.setHeader("Cache-Control", "cache");

Это волшебным образом помогло мне, когда я столкнулся с похожими проблемами с IE.

...