Jsf 2 火狐4&;IE9韩元';t在JSF应用程序中打开生成的JasperReports
我正在开发一个JavaEE应用程序(JSF2+richfaces 3.3.3+JasperReports 3.7.1+SSL) 我用chrome测试了我的应用程序,它运行正常。 但在Firefox4(Firefox3可以正常工作)和IE9中,JasperReports生成的pdf不会在新页面中打开: 这是我的密码:Jsf 2 火狐4&;IE9韩元';t在JSF应用程序中打开生成的JasperReports,jsf-2,jasper-reports,internet-explorer-9,firefox4,Jsf 2,Jasper Reports,Internet Explorer 9,Firefox4,我正在开发一个JavaEE应用程序(JSF2+richfaces 3.3.3+JasperReports 3.7.1+SSL) 我用chrome测试了我的应用程序,它运行正常。 但在Firefox4(Firefox3可以正常工作)和IE9中,JasperReports生成的pdf不会在新页面中打开: 这是我的密码: <h:form id="forme2" target="_blank"> <h:commandButton
<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;
}
}
公共字符串openPDF(){
//准备。
FacesContext FacesContext=FacesContext.getCurrentInstance();
ExternalContext=facesContext.getExternalContext();
HttpServletResponse=(HttpServletResponse)externalContext.getResponse();
连接=空;
试一试{
connection=getConnection();
映射参数=新的HashMap();
parameters.put(“num_cpt”,cpt.getNumCpt());
茉莉花;
jasperPrint=JasperFillManager.fillReport(新文件(“C:\\JasperReports\\”+“Portefuille”+“.jasper”)、参数、连接);
JRPdfExporter exporter=新的JRPdfExporter();
exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM,response.getOutputStream());
response.setContentType(“application/pdf”);
response.setHeader(“内容处置”、“内联;文件名=“+cpt.getLibCpt().replace”(“,”)+“\u portefueille.pdf”);
出口商。出口报告();
response.getOutputStream().flush();
}捕获(IOEX异常){
例如printStackTrace();
}最后{
facesContext.responseComplete();
试一试{
if(连接!=null){
connection.close();
}
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}
你有什么办法解决我的问题吗
更新1:当我从我的h:form标签中删除属性target=“\u blank”时,它在IE9中工作正常,但在firefox 4中仍然不工作尝试在导出之前添加以下代码: response.setHeader("Pragma", "cache"); response.setHeader("Cache-Control", "cache"); setHeader(“Pragma”、“cache”); setHeader(“缓存控制”、“缓存”); 当我遇到与IE类似的问题时,这神奇地帮助了我