У меня есть пользовательский компонент (то есть файл xhtml с ui: состав внутри), где у меня есть поле загрузки файла. Когда файл выбран, он загружается через AJAX, как это
<uc:fileUpload
id="#{id}fileUploadComponent"
idSuffix="#{id}fileUploadSuffix"
value="#{fileUpload.docsFilePart}"
accept="#{fieldWrapper.acceptedFileTypes}"
widgetVar="#{id}documentUploadWidget"
nullAllowed="#{!((fieldDef.mandatory and
fieldWrapper.getCurrentFileCount() lt 1) and isSaving)}"
maxSize="#{customField.maxFileSize}" >
<f:ajax listener="#{fileUpload.uploadNewFile(fieldWrapper)}" render="#{localId}fileUploadMain messages"/>
</uc:fileUpload>
Ниже этой загрузки есть <div>
с тем же идентификатором, который указан в атрибуте render
вызова ajax, где отображаются ссылки для загрузки файлов. То, что происходит, странно - после того, как файл выбран, он загружен, <div>
корректно обновляется со ссылкой на недавно загруженный файл. Однако, когда я нажимаю «Отмена» или «Сохранить» на странице, вызываются соответствующие действия, в браузер возвращается правильный ответ (со статусом 200), но браузер, кажется, игнорирует его - страница визуально не обновляется или что-то еще ...
Пользовательский компонент представляет собой довольно большой кусок кода с не так-то простой в переписывании логикой, поэтому заменить его на этом этапе будет ... сложно ...
Единственное, чего не следует делать, это то, что загрузка файла происходит в отдельном контроллере, в то время как контроллер главной страницы - другой. Это потому, что отдельный контроллер должен обрабатывать загрузки из пользовательского компонента.
Я не могу понять, что именно происходит, тем более, почему, и я буду признателен за любые идеи!
Для чего я стою, я использую Mojarra на Wildfly 11 (ту, что предоставлена AS)