Закройте модал после успешной загрузки файла в JSF 2.0 - PullRequest
0 голосов
/ 07 ноября 2011

Ссылка на команду присутствует на странице JSF.При нажатии на ссылку открывается модальное окно.Кнопка загрузки в модальном режиме выбрана, выполняется проверка полей ввода, а затем файл загружается.Требуется закрыть модальный и вернуться на ту же страницу после успешной загрузки файла.Как мы можем закрыть модальное окно, когда на той же странице появляется диалоговое окно «Открыть файл».Поле

<h:panelGroup rendered="#{downloadBacking.showDownloadModal}">
    <ui:include src="DownloadFile.xhtml" />
</h:panelGroup>

showDownloadModal определено в bean-объекте видимости.

При нажатии кнопки загрузки в модальном режиме вызывается метод downloadFile().

public String downlaodFile(){
    // response.getwriter.write(string);
    showDownloadModal = false;
    return "";
}

1 Ответ

1 голос
/ 07 ноября 2011

Ваш downloadFile() метод не будет работать таким образом.Вы можете отправить только один ответ на запрос.Загрузка файла сама по себе уже целый ответ.Вы не можете добавить к нему другие данные;это только повредит скачанный файл с этими данными.Или, если вы правильно написали код загружаемого файла, вы также должны были увидеть IllegalStateException: response already committed.

У вас есть 2 варианта:

  1. Немедленно закрыть диалогпо ссылке на скачивание с помощью некоторого кода JS.

    <h:commandButton value="Download" action="#{bean.downloadFile}" 
        onclick="some JS code here to hide the modal" />
    
  2. Сохраните временный диск файлового сервера (или как byte[] в памяти, если он не большой) ивернитесь на ту же страницу, где вы скрываете диалог, и условно визуализируйте JS window.location, который указывает на этот файл.Это особенно полезно, если загружаемый файл действительно необходимо сначала создать / сгенерировать, что может занять много времени.

    <h:panelGroup rendered="#{bean.downloadReady}">
        <script>window.location = '#{bean.downloadURL}';</script>
    </h:panelGroup>
    

    URL-адрес может указывать на простой сервлет, который транслирует файл с диска или из памяти.

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