В моем приложении 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.