2013-08-29 2 views
1

Im пытаясь достичь того же скачать файл через JSF, как описано в этих должностях: JSF2 download file returns xhtml page source How to provide a file download from a JSF backing bean? http://bharatonjava.wordpress.com/2013/02/01/downloading-file-in-jsf-2/ http://prabinhada.blogspot.com/2012/06/how-to-download-file-using-jsf.htmlJSF возвращается загрузить файл index.jsf

Моя проблема заключается в том, что я на самом деле можно загрузить файл, но его имя просто неверно (в зависимости от того, какой браузер). Это XML-файл я маршал в способе загрузки, но браузер всегда получает файл index.jsf (но тип MIME устанавливается в тексте/XML и размере файла правильного)

Он работает на:

  • Mojarra 2.1.7
  • RichFaces 4.3.3.Final
  • jboss-7.1.1.Final

Пожалуйста, смотрите ниже, если вы заметили какие-либо проблемы

public void exportEDL() throws Exception { 
    String name = this.file.getName(); 
    FacesContext facesContext = FacesContext.getCurrentInstance();  

    ExternalContext externalContext = facesContext.getExternalContext(); 
    HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 

    BufferedOutputStream output = null; 
    StringWriter sw = null; 
    try { 

     ... 
     sw = new StringWriter(); 
     // edl is the jaxb i want to return as xml file 
     marshaller.marshal(this.edl, sw); 

     // Init servlet response. 
     response.reset(); 
     response.setBufferSize(DEFAULT_BUFFER_SIZE); 
     response.setContentType("text/xml"); 
     response.setContentLength(sw.getBuffer().length()); 
     response.setHeader("Content-Disposition", "attachment;filename\"" + name + "\""); 
     output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); 
     output.write(sw.toString().getBytes("UTF-8")); 

     // Finalize task. 
     sw.flush(); 
     output.flush(); 
    } catch (Exception e) {  
     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, null, e.getMessage()); 
     facesContext.addMessage("Error", msg); 
     return; 
    } finally { 
     // Gently close streams. 
     IOUtil.close(sw); 
     IOUtil.close(output); 
     clearUploadData(); 
    } 

    // Inform JSF that it doesn't need to handle response. 
    facesContext.responseComplete(); 
    // facesContext.renderResponse(); 
    // facesContext.release(); 
} 

Я попытался с чем-то еще, чем с XML-сортировкой без лучших результатов. Вам, ребята, удалось загрузить файл с правильным именем + расширение?

Это CommandButton в представлении:

<h:commandButton action="#{fileUploadBean.exportEDL()}" 

Спасибо!

+0

response.setHeader ("Content-Disposition", «привязанность; имя файла = \ "" + имя + "\" "); // добавление знака = делает трюк! – chienlou

ответ

2

Вы, кажется, отсутствует =, я думаю, что это было бы правильно:

response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\""); 

или просто

response.setHeader("Content-Disposition", "attachment;filename=" + name); 
+0

Спасибо большое! вы правы Мне удалось испортить копию: / – chienlou

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