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