2010-05-20 4 views
0

Привет, я пробовал два разных метода отправки файла в браузер (чтобы пользователь загрузил файл). Я попробовал пример из MyFacesПроблема с попыткой отправить файл в браузер в JSF

вики страницы
FacesContext context = FacesContext.getCurrentInstance(); 
    HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getResponse(); 

    int read = 0; 
    byte[] bytes = new byte[1024]; 

    String fileName = "test.txt"; 
    response.setContentType("text/plain"); 

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

    OutputStream os = null; 

    StringBuffer stringBuffer1 = new StringBuffer("Java Forums rock"); 
    ByteArrayInputStream bis1; 
    try { 
     bis1 = new ByteArrayInputStream(stringBuffer1.toString().getBytes("UTF-8")); 

     os = response.getOutputStream(); 

     while ((read = bis1.read(bytes)) != -1) { 
      os.write(bytes, 0, read); 
     } 

     os.flush(); 
     os.close(); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    FacesContext.getCurrentInstance().responseComplete(); 

Я также попытался использовать компонент под названием FileDownload из PrimeFaces. Оба дают тот же результат:

Получаем ответ от сервера, ответ содержит текст, который должен находиться в файле. Заголовок является следующим:

X-Powered-By Servlet/3.0, JSF/2.0 
Server GlassFish v3 
Content-Disposition attachment;filename="test.txt" 
Content-Type text/plain 
Transfer-Encoding chunked 
Date Thu, 20 May 2010 06:30:20 GMT 

Для меня это выглядит правильно, но по какой-то причине я не получаю, чтобы загрузить файл, я просто получить этот ответ в поджигатель.

Есть ли у кого-нибудь идеи?, Может быть проблема с сервером? Я с помощью GlassFish 3

Благодарности /Stefan

ответ

3

звучит как, как если бы вы запрашиваете это асинхронно (с помощью Ajax), а не синхронно. Когда вы это сделаете, вы действительно никогда не увидите диалог Save As. Вы всегда должны запрашивать загрузку файлов синхронно. То есть используйте «plain vanilla» h:commandLink или h:commandButton для этого вместо некоторого ajaxical компонента команды.

+0

Jepp, что было проблемой –

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

  • Нет связанных вопросов^_^