Могу ли я выполнить javascript после ответа файла от действия non-ajax primefaces? - PullRequest
0 голосов
/ 18 февраля 2019

В моем приложении primefaces есть форма, которая вызывает действие из базового компонента, и действие отвечает файлом для загрузки пользователем с использованием outputStream.

На стороне клиента у меня есть фальшивкакомандная кнопка submit с обработчиком события onclick, который запускает JavaScript, отображающий счетчик, а затем щелкает скрытую «фактическую» командную кнопку submit, которая вызывает действие вспомогательного компонента, отвечающего файлом.

Как только я получу ответ, я 'Я хотел бы скрыть счетчик.

Я знаю, что должен использовать ajax = false, если я хочу, чтобы сервер ответил файлом.Но тогда я не могу использовать незавершенный слушатель.

Есть ли здесь какое-нибудь решение / обходной путь для запуска некоторого JavaScript, когда я получу ответ на стороне клиента?Я нашел пару старых сообщений на форуме, но ни одно из них не содержит работоспособного.

// The buttons and spinner
<i class="fa fa-spin fa-spinner" id="spinner" style="display:none;"/>
<p:commandButton widgetVar="fakeSubmitButton" type="button" value="Submit" onclick="submit9);" ajax="false" /> 
<p:commandButton widgetVar="actualSubmitButton" type="submit" action="#{testController.respondWithFile}" value="" style="display:none;" ajax="false"/> 

// ... and the two javascript functions 
function submitReport() {
    $('#spinner').show();
    PF('actualSubmitButton').getJQ().click();
}           
function postSubmitReport() {
    $('#spinner').hide();
}

// ... and on the server side I respond with a file by grabbing the ExternalContext from the FacesContext and using its outputStream.

1 Ответ

0 голосов
/ 18 февраля 2019

Если есть более подходящие альтернативы, я все же хотел бы их услышать, однако я нашел способ добиться желаемого поведения с помощью ap: fileDownload, аналогично примеру демонстрации: https://www.primefaces.org/showcase/ui/file/download.xhtml.На стороне сервера мой код относительно не изменился, за исключением того, что вместо возврата файла ответов с использованием выходного потока ExternalContext я создаю StreamedContent, который возвращается функцией, вызываемой виджетом fileDownload.

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