Проблема при попытке отправить файл в браузер в JSF - PullRequest
0 голосов
/ 20 мая 2010

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

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

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

У кого-нибудь есть идеи? Может ли быть проблема с настройкой сервера? Я использую Glassfish 3

Спасибо / Стефан

1 Ответ

3 голосов
/ 20 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...