如何使用ServletResponse中的内容在JSF中显示PDF

时间:2015-06-16 12:38:13

标签: jsf pdf jsf-2 richfaces

在我的应用程序中,我使用jsf& richfaces,我想在Web浏览器中显示生成的pdf,我已在服务器端生成此PDF,并且它在ServletResponse中可用,但我无法在我的网页中显示它。

我已经尝试了this问题,但它并没有解决我的问题。

有没有图书馆或特殊方法可以做到这一点?

我试图做的事情如下。

    <h:commandLink rendered="#{ fileImportOptionsViewBean.isFileExist(status.myPdf) }" action="#
    {fileImportOptionsViewBean.downloadFile(satus.myPdf)}" target="_blank">


<h:graphicImage url="../../resources/xyz/icons/pdf.png" /></h:commandLink>

downloadFile方法

public void downloadFile(String filePath){
    try {           
        File file=new File(filePath);
        if(file.exists()){
            FacesContext fc=FacesContext.getCurrentInstance();
            ExternalContext ec=fc.getExternalContext();
            ec.responseReset();
            ec.setResponseContentType("application/pdf");
            ec.setResponseHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); 
            ec.setResponseBufferSize(8192);
            OutputStream output = ec.getResponseOutputStream();                       
            URL url = file.toURL();
                            try(
                                BufferedInputStream bis = new BufferedInputStream(url.openStream());
                                BufferedOutputStream bos = new BufferedOutputStream(output);             
                             ){
                                byte[] buff = new byte[8192];
                                int bytesRead;
                                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                                bos.write(buff, 0, bytesRead);              
                                 }                      
                            }
            fc.responseComplete(); 
        }


    } catch (Exception e) {

    }

}

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

我没有看到你当前的设置有什么问题。大概可能是你的XHTML页面出现了问题,导致你的h:commandLink没有触发事件。请参考this帖子以获取更多信息。细节,当然这对你有所帮助。