2016-09-21 25 views
1

JSFを使用しています。ボタンをクリックすると、新しいタブでPDFファイルを開きたいと考えています。新しいタブでPDFファイルを開く方法

XHTML

<p:commandButton onclick="this.form.target = '_blank'" 
       actionListener="#{managedBean.openFile(file)}" 
       ajax="false" /> 

管理Bean

public void openFile(File file) { 
FacesContext facesContext = FacesContext.getCurrentInstance(); 
     ExternalContext externalContext = facesContext.getExternalContext(); 
     HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 
     BufferedInputStream input = null; 
     BufferedOutputStream output = null; 

     try { 
      // Open file. 
      input = new BufferedInputStream(new FileInputStream(file), 10240); 

      // Init servlet response. 
      response.reset(); 
      // lire un fichier pdf 
      response.setHeader("Content-type", "application/pdf"); 
      response.setContentLength((int)file.length()); 

      response.setHeader("Content-disposition", "attachment; filename=" + node.getNomRepertoire()); 
      response.setHeader("pragma", "public"); 
      output = new BufferedOutputStream(response.getOutputStream(), 10240); 

      // Write file contents to response. 
      byte[] buffer = new byte[10240]; 
      int length; 
      while ((length = input.read(buffer)) > 0) { 
       output.write(buffer, 0, length); 
      } 

      // Finalize task. 
      output.flush(); 
     } finally { 
      // Gently close streams. 

       output.close(); 
       input.close(); 
     } 
} 

私はそれだけでファイルをダウンロードし、このメソッドを使用するときに問題があります。あなたの詳細については、私はこの記事を以下のよ:http://balusc.omnifaces.org/2006/05/pdf-handling.html

答えて

2

あなたはattachmentの代わりにinlineを使用するので、

response.setHeader("Content-disposition", "inline; filename=" + node.getNomRepertoire()); 

response.setHeader("Content-disposition", "attachment; filename=" + node.getNomRepertoire()); 

を変更する必要があります。

も参照してください:

+0

はちょうどそれがmanagedBeanから 'onclickの= "this.form.target = '_blank'"'することが可能である知っていますか?!? –

+0

あなたのBeanにJavaScriptをいくつか作成してフロントエンドに渡すこともできますが、それは複雑なことになります。 PFが 'onclick'をラップするので、' this'が動作するかどうかは分かりません。もしそうなら、 'document.getElementById( 'yourFormId').target = '_blank''を試してください。 –

関連する問題