Загрузка файла из JSF с предоставленным ответом - PullRequest
1 голос
/ 14 сентября 2011

У меня есть несколько динамически сгенерированных файлов, которые я хочу, чтобы мое приложение JSF 2.0 загрузило для пользователя.Я смог заставить это работать, используя код, найденный в решении здесь:

Принудительное сохранение в виде диалога из любого веб-браузера из приложения JSF

икомандная кнопка в форме на странице

И это прекрасно работает, за исключением одного заминки.Я хотел бы иметь возможность вернуть сообщение пользователю на начальной странице, в котором сообщается, что его файл обрабатывается, и, пожалуйста, подождите.Очевидно, что вызов responseComplete останавливает это.Есть ли какой-нибудь способ перерисовать страницу отправки и отправить обратно файл с той же кнопки?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Нет, вы не можете. Вы можете отправить только один ответ обратно на запрос. Лучшее, что вы можете сделать, это использовать JavaScript, чтобы показать изначально скрытый div или что-то, что содержит сообщение во время onclick. Но у вас возникнет проблема, заключающаяся в том, что вы не сможете скрыть ее после завершения загрузки.

Альтернативой является сохранение файла на временном диске и возврат полноценного ответа JSF, в котором отображается ссылка на скачивание, которая возвращает файл с временного диска автономным сервлетом.

0 голосов
/ 16 сентября 2011

Я думаю, что вы можете использовать ajax для решения этой проблемы.Вызовите метод, который создает файл из действия ajax, и предоставьте обратный вызов javascript для обработки навигации или для отображения слоя или любого другого

  <script type="text/javascript">

      function processEvent(data) {
        if (data.status == "begin") {
            showWaitingLayer();
        } else if (data.status == "success") {
            hideWaitingLayer();
            showDownloadLink();
        }               
      }
  </script>

  <h:commandLink action="#{myBean.createDocument}">
    <f:ajax onevent="processEvent"/>
  </h:commandLink>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...