2015-06-16 47 views
1

在我的應用程序中,我使用jsf & richfaces,我想在Web瀏覽器中顯示生成的PDF,我已經在serverside中生成了這個PDF,並且它在ServletResponse中可用,但我無法在我的網頁上顯示它。如何在JSF中顯示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) { 

    } 

} 

任何幫助表示讚賞,感謝。

+0

不,在downloadFile方法執行完美,我相信我用jsf做的也可以,但是響應不會在新打開的窗口中呈現。 –

+0

您發佈的代碼的當前行爲是什麼?究竟發生了什麼? – Andrey

回答

0

我沒有看到你當前的設置有什麼問題。最有可能的問題在於你的XHTML頁面,並且有些東西會導致你的h:commandLink不能觸發該事件。請參考this文章瞭解更多細節,當然這會對你有一些幫助。