Хорошо, я понял это.
Загрузка скрипта вверху страницы позже переопределяется
Если я загружаю скрипт в конце страницы, он переопределяет нагрузку, но также нарушает механизм JSF. Таким образом, лучшим решением было бы использовать пользовательскую загрузку JSF и поместить скрипт в конец страницы. Немного покопавшись в источнике JSF, я нашел функцию.
<script type="text/javascript">
myfaces._impl.core._Runtime.addOnLoad(window, checkDownloadFile);
</script>
И, конечно, я должен был определить checkDownloadFile, который делает то, что у меня было в оригинальном посте.
Я тоже разобрался с неполным. Тег f: ajax имеет атрибут onevent, который вызывается 3 раза. Один раз перед казнью и дважды после. Я полагаю, один раз сразу после завершения запроса, затем снова после обновления компонентов страницы. Функция обратного вызова принимает параметр события, который имеет статус. Таким образом, в вашей функции обратного вызова вы проверяете статус, чтобы решить, стоит ли что-то делать. Статусы - начало, завершение и успех. Так что для моего случая у меня есть:
<f:ajax execute="userManagementForm" event="click" onevent="myEvent" render="userManagementForm:results userManagementForm:workarea userManagementForm:fileDownload" />
А потом сценарий:
function myEvent(e) {
if (e.status == 'success') {
checkDownloadFile();
}
}