2016-09-21 9 views
1

Я работаю с JSF, и я хочу открыть PDF-файл на новой вкладке, когда я нажимаю кнопку.Как открыть PDF-файл на новой вкладке

XHTML

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

Управляемый боб

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

Вы должны изменить

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

в

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

Таким образом, использовать inline вместо attachment.

Смотрите также:

+0

просто знать, что можно 'OnClick = "this.form.target = '_blank'"' из managedBean?!? –

+0

Вы можете создать JavaScript в своем компоненте и передать его в интерфейс, но это будет усложнять ситуацию. Не уверен, хотя если 'this' будет работать, поскольку PF обертывает' onclick'. Если да, попробуйте 'document.getElementById ('yourFormId'). Target = '_blank''. –

Смежные вопросы