Раньше это поддерживалось в RF 3.3.Но чтобы сэкономить время на переход на RF 4.0, помимо прочего, <rich:fileUpload>
получил гораздо меньше внимания, чем заслуживает.В настоящее время существует множество открытых заявок для его улучшения.
Пока они не улучшат его, в настоящее время лучше всего использовать некоторые пользовательские jQuery / JS и CSS для достижения функциональных требований:выбор и выгрузка только одного файла.
Этот скрипт не позволяет конечному пользователю загружать несколько файлов, скрывая кнопку добавления, когда файл уже выбран:
jQuery.extend(RichFaces.ui.FileUpload.prototype, {
__updateButtons: function() {
if (!this.loadableItem && this.list.children(".rf-fu-itm").size()) {
if (this.items.length) {
this.uploadButton.css("display", "inline-block");
this.addButton.hide();
} else {
this.uploadButton.hide();
this.addButton.css("display", "inline-block");
}
} else {
this.uploadButton.hide();
this.addButton.css("display", "inline-block");
}
}
});
Убедитесь, что вышеуказанный JSзагружен после сценариев RF по умолчанию (которые уже включают jQuery).Это можно сделать с помощью <h:outputScript>
в теле, которое можно при необходимости установить с помощью target="head"
.
. Этот CSS ограничивает высоту списка файлов и удаляет нижнюю границу одного элемента:
.rf-fu-lst {
height: 60px;
}
.rf-fu-itm {
border: 0;
}
Убедитесь, что вышеуказанный CSS загружен после стилей RF по умолчанию.Вы можете сделать это с помощью <h:outputStylesheet>
в теле (так что не кладите голову).
И как мне вызвать метод в моем управляемом бине (которыйотправить изображение в корзину Amazon S3) после завершения загрузки?
Просто выполните работу в методе прослушивателя, который прикреплен к атрибуту fileUploadListener
.
<rich:fileUpload fileUploadListener="#{bean.upload}">